/**
 * Pencil Code IcedCoffeeScript Compiler v1.8.0-c
 * https://github.com/PencilCode/pencil-coffee-script
 *
 * Copyright 2011, Jeremy Ashkenas, Maxwell Krohn
 * Released under the MIT License
 */
this.CoffeeScript||(function(root){
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.CoffeeScript=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
// Generated by IcedCoffeeScript 1.8.0-c
(function() {
  var CoffeeScript, compile, compileCount, runScripts,
    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };

  CoffeeScript = _dereq_('./coffee-script');

  CoffeeScript.require = _dereq_;

  CoffeeScript.code = {};

  compile = CoffeeScript.compile;

  compileCount = 0;

  CoffeeScript["eval"] = function(code, options) {
    if (options == null) {
      options = {};
    }
    if (options.bare == null) {
      options.bare = true;
    }
    return eval(compile(code, options));
  };

  CoffeeScript.run = function(code, options) {
    if (options == null) {
      options = {};
    }
    options.bare = true;
    options.shiftLine = true;
    return Function(compile(code, options))();
  };

  if (typeof window === "undefined" || window === null) {
    return;
  }

  if ((typeof btoa !== "undefined" && btoa !== null) && (typeof JSON !== "undefined" && JSON !== null) && (typeof unescape !== "undefined" && unescape !== null) && (typeof encodeURIComponent !== "undefined" && encodeURIComponent !== null)) {
    compile = function(code, options) {
      var error, js, name, v3SourceMap, _ref;
      if (options == null) {
        options = {};
      }
      name = "coffeescript-" + (compileCount++) + ".js";
      options.sourceMap = true;
      options.inline = true;
      try {
        _ref = CoffeeScript.compile(code, options), js = _ref.js, v3SourceMap = _ref.v3SourceMap;
      } catch (_error) {
        error = _error;
        if (error instanceof SyntaxError) {
          CoffeeScript.code[name] = {
            syntaxError: error
          };
        }
        throw error;
      }
      CoffeeScript.code[name] = {
        coffee: code,
        map: v3SourceMap,
        js: js
      };
      return "" + js + "\n//# sourceMappingURL=data:application/json;base64," + (btoa(unescape(encodeURIComponent(v3SourceMap)))) + "\n//# sourceURL=" + name;
    };
  }

  CoffeeScript.load = function(url, callback, options, hold) {
    var xhr;
    if (options == null) {
      options = {};
    }
    if (hold == null) {
      hold = false;
    }
    options.sourceFiles = [url];
    xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new window.XMLHttpRequest();
    xhr.open('GET', url, true);
    if ('overrideMimeType' in xhr) {
      xhr.overrideMimeType('text/plain');
    }
    xhr.onreadystatechange = function() {
      var param, _ref;
      if (xhr.readyState === 4) {
        if ((_ref = xhr.status) === 0 || _ref === 200) {
          param = [xhr.responseText, options];
          if (!hold) {
            CoffeeScript.run.apply(CoffeeScript, param);
          }
        } else {
          throw new Error("Could not load " + url);
        }
        if (callback) {
          return callback(param);
        }
      }
    };
    return xhr.send(null);
  };

  runScripts = function() {
    var coffees, coffeetypes, execute, i, index, s, script, scripts, _fn, _i, _len;
    scripts = window.document.getElementsByTagName('script');
    coffeetypes = ['text/coffeescript', 'text/literate-coffeescript'];
    coffees = (function() {
      var _i, _len, _ref, _results;
      _results = [];
      for (_i = 0, _len = scripts.length; _i < _len; _i++) {
        s = scripts[_i];
        if (_ref = s.type, __indexOf.call(coffeetypes, _ref) >= 0) {
          _results.push(s);
        }
      }
      return _results;
    })();
    index = 0;
    execute = function() {
      var param;
      param = coffees[index];
      if (param instanceof Array) {
        CoffeeScript.run.apply(CoffeeScript, param);
        index++;
        return execute();
      }
    };
    _fn = function(script, i) {
      var options;
      options = {
        literate: script.type === coffeetypes[1]
      };
      if (script.src) {
        return CoffeeScript.load(script.src, function(param) {
          coffees[i] = param;
          return execute();
        }, options, true);
      } else {
        options.sourceFiles = ['embedded'];
        return coffees[i] = [script.innerHTML, options];
      }
    };
    for (i = _i = 0, _len = coffees.length; _i < _len; i = ++_i) {
      script = coffees[i];
      _fn(script, i);
    }
    return execute();
  };

  if (window.addEventListener) {
    window.addEventListener('DOMContentLoaded', runScripts, false);
  } else {
    window.attachEvent('onload', runScripts);
  }

  window.iced = CoffeeScript.iced;

  module.exports = CoffeeScript;

}).call(this);

},{"./coffee-script":2}],2:[function(_dereq_,module,exports){
(function (process,global){
// Generated by IcedCoffeeScript 1.8.0-c
(function() {
  var Lexer, SourceMap, compile, ext, formatSourcePosition, fs, getSourceMap, helpers, iced_runtime, iced_transform, lexer, parser, path, sourceMaps, vm, withPrettyErrors, _base, _i, _len, _ref,
    __hasProp = {}.hasOwnProperty,
    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };

  fs = _dereq_('fs');

  vm = _dereq_('vm');

  path = _dereq_('path');

  Lexer = _dereq_('./lexer').Lexer;

  parser = _dereq_('./parser').parser;

  helpers = _dereq_('./helpers');

  SourceMap = _dereq_('./sourcemap').SourceMap;

  iced_transform = _dereq_('./iced').transform;

  iced_runtime = _dereq_('iced-runtime');

  exports.VERSION = '1.8.0-c';

  exports.FILE_EXTENSIONS = ['.coffee', '.litcoffee', '.coffee.md', '.iced', '.liticed', '.iced.md'];

  exports.helpers = helpers;

  withPrettyErrors = function(fn) {
    return function(code, options) {
      var err;
      if (options == null) {
        options = {};
      }
      try {
        return fn.call(this, code, options);
      } catch (_error) {
        err = _error;
        throw helpers.updateSyntaxError(err, code, options.filename);
      }
    };
  };

  exports.compile = compile = withPrettyErrors(function(code, options) {
    var answer, currentColumn, currentLine, extend, fragment, fragments, header, js, map, merge, newLines, _i, _len;
    merge = helpers.merge, extend = helpers.extend;
    options = extend({}, options);
    if (options.sourceMap) {
      map = new SourceMap;
    }
    fragments = (iced_transform(parser.parse(lexer.tokenize(code, options)), options)).compileToFragments(options);
    currentLine = 0;
    if (options.header) {
      currentLine += 1;
    }
    if (options.shiftLine) {
      currentLine += 1;
    }
    currentColumn = 0;
    js = "";
    for (_i = 0, _len = fragments.length; _i < _len; _i++) {
      fragment = fragments[_i];
      if (options.sourceMap) {
        if (fragment.locationData && !/^[;\s]*$/.test(fragment.code)) {
          map.add([fragment.locationData.first_line, fragment.locationData.first_column], [currentLine, currentColumn], {
            noReplace: true
          });
        }
        newLines = helpers.count(fragment.code, "\n");
        currentLine += newLines;
        if (newLines) {
          currentColumn = fragment.code.length - (fragment.code.lastIndexOf("\n") + 1);
        } else {
          currentColumn += fragment.code.length;
        }
      }
      js += fragment.code;
    }
    if (options.header) {
      header = "Generated by IcedCoffeeScript " + this.VERSION;
      js = "// " + header + "\n" + js;
    }
    if (options.sourceMap) {
      answer = {
        js: js
      };
      answer.sourceMap = map;
      answer.v3SourceMap = map.generate(options, code);
      return answer;
    } else {
      return js;
    }
  });

  exports.tokens = withPrettyErrors(function(code, options) {
    return lexer.tokenize(code, options);
  });

  exports.nodes = withPrettyErrors(function(source, options) {
    if (typeof source === 'string') {
      return iced_transform(parser.parse(lexer.tokenize(source, options)), options);
    } else {
      return iced_transform(parser.parse(source), options);
    }
  });

  exports.run = function(code, options) {
    var answer, dir, mainModule, _ref;
    if (options == null) {
      options = {};
    }
    mainModule = _dereq_.main;
    mainModule.filename = process.argv[1] = options.filename ? fs.realpathSync(options.filename) : '.';
    mainModule.moduleCache && (mainModule.moduleCache = {});
    dir = options.filename ? path.dirname(fs.realpathSync(options.filename)) : fs.realpathSync('.');
    mainModule.paths = _dereq_('module')._nodeModulePaths(dir);
    if (!helpers.isCoffee(mainModule.filename) || _dereq_.extensions) {
      options.runtime = "interp";
      answer = compile(code, options);
      code = (_ref = answer.js) != null ? _ref : answer;
    }
    return mainModule._compile(code, mainModule.filename);
  };

  exports["eval"] = function(code, options) {
    var Module, Script, js, k, o, r, sandbox, v, _i, _len, _module, _ref, _ref1, _require;
    if (options == null) {
      options = {};
    }
    if (!(code = code.trim())) {
      return;
    }
    Script = vm.Script;
    if (Script) {
      if (options.sandbox != null) {
        if (options.sandbox instanceof Script.createContext().constructor) {
          sandbox = options.sandbox;
        } else {
          sandbox = Script.createContext();
          _ref = options.sandbox;
          for (k in _ref) {
            if (!__hasProp.call(_ref, k)) continue;
            v = _ref[k];
            sandbox[k] = v;
          }
        }
        sandbox.global = sandbox.root = sandbox.GLOBAL = sandbox;
      } else {
        sandbox = global;
      }
      sandbox.__filename = options.filename || 'eval';
      sandbox.__dirname = path.dirname(sandbox.__filename);
      if (!(sandbox !== global || sandbox.module || sandbox.require)) {
        Module = _dereq_('module');
        sandbox.module = _module = new Module(options.modulename || 'eval');
        sandbox.require = _require = function(path) {
          return Module._load(path, _module, true);
        };
        _module.filename = sandbox.__filename;
        _ref1 = Object.getOwnPropertyNames(_dereq_);
        for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
          r = _ref1[_i];
          if (r !== 'paths') {
            _require[r] = _dereq_[r];
          }
        }
        _require.paths = _module.paths = Module._nodeModulePaths(process.cwd());
        _require.resolve = function(request) {
          return Module._resolveFilename(request, _module);
        };
      }
    }
    o = {};
    for (k in options) {
      if (!__hasProp.call(options, k)) continue;
      v = options[k];
      o[k] = v;
    }
    o.bare = true;
    js = compile(code, o);
    if (sandbox === global) {
      return vm.runInThisContext(js);
    } else {
      return vm.runInContext(js, sandbox);
    }
  };

  exports.register = function() {
    return _dereq_('./register');
  };

  if (_dereq_.extensions) {
    _ref = this.FILE_EXTENSIONS;
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      ext = _ref[_i];
      if ((_base = _dereq_.extensions)[ext] == null) {
        _base[ext] = function() {
          throw new Error("Use CoffeeScript.register() or require the coffee-script/register module to require " + ext + " files.");
        };
      }
    }
  }

  exports._compileFile = function(filename, sourceMap, opts_passed) {
    var answer, err, k, opts, raw, stripped, v;
    if (sourceMap == null) {
      sourceMap = false;
    }
    if (opts_passed == null) {
      opts_passed = {};
    }
    raw = fs.readFileSync(filename, 'utf8');
    stripped = raw.charCodeAt(0) === 0xFEFF ? raw.substring(1) : raw;
    opts = {
      filename: filename,
      sourceMap: sourceMap,
      literate: helpers.isLiterate(filename)
    };
    for (k in opts_passed) {
      v = opts_passed[k];
      opts[k] = v;
    }
    try {
      answer = compile(stripped, opts);
    } catch (_error) {
      err = _error;
      throw helpers.updateSyntaxError(err, stripped, filename);
    }
    return answer;
  };

  lexer = new Lexer;

  parser.lexer = {
    lex: function() {
      var tag, token;
      token = this.tokens[this.pos++];
      if (token) {
        tag = token[0], this.yytext = token[1], this.yylloc = token[2];
        this.errorToken = token.origin || token;
        this.yylineno = this.yylloc.first_line;
      } else {
        tag = '';
      }
      return tag;
    },
    setInput: function(tokens) {
      this.tokens = tokens;
      return this.pos = 0;
    },
    upcomingInput: function() {
      return "";
    }
  };

  parser.yy = _dereq_('./nodes');

  exports.iced = iced_runtime;

  parser.yy.parseError = function(message, _arg) {
    var errorLoc, errorTag, errorText, errorToken, token, tokens, _ref1;
    token = _arg.token;
    _ref1 = parser.lexer, errorToken = _ref1.errorToken, tokens = _ref1.tokens;
    errorTag = errorToken[0], errorText = errorToken[1], errorLoc = errorToken[2];
    errorText = errorToken === tokens[tokens.length - 1] ? 'end of input' : errorTag === 'INDENT' || errorTag === 'OUTDENT' ? 'indentation' : helpers.nameWhitespaceCharacter(errorText);
    return helpers.throwSyntaxError("unexpected " + errorText, errorLoc);
  };

  formatSourcePosition = function(frame, getSourceMapping) {
    var as, column, fileLocation, fileName, functionName, isConstructor, isMethodCall, line, methodName, source, tp, typeName;
    fileName = void 0;
    fileLocation = '';
    if (frame.isNative()) {
      fileLocation = "native";
    } else {
      if (frame.isEval()) {
        fileName = frame.getScriptNameOrSourceURL();
        if (!fileName) {
          fileLocation = "" + (frame.getEvalOrigin()) + ", ";
        }
      } else {
        fileName = frame.getFileName();
      }
      fileName || (fileName = "<anonymous>");
      line = frame.getLineNumber();
      column = frame.getColumnNumber();
      source = getSourceMapping(fileName, line, column);
      fileLocation = source ? "" + fileName + ":" + source[0] + ":" + source[1] : "" + fileName + ":" + line + ":" + column;
    }
    functionName = frame.getFunctionName();
    isConstructor = frame.isConstructor();
    isMethodCall = !(frame.isToplevel() || isConstructor);
    if (isMethodCall) {
      methodName = frame.getMethodName();
      typeName = frame.getTypeName();
      if (functionName) {
        tp = as = '';
        if (typeName && functionName.indexOf(typeName)) {
          tp = "" + typeName + ".";
        }
        if (methodName && functionName.indexOf("." + methodName) !== functionName.length - methodName.length - 1) {
          as = " [as " + methodName + "]";
        }
        return "" + tp + functionName + as + " (" + fileLocation + ")";
      } else {
        return "" + typeName + "." + (methodName || '<anonymous>') + " (" + fileLocation + ")";
      }
    } else if (isConstructor) {
      return "new " + (functionName || '<anonymous>') + " (" + fileLocation + ")";
    } else if (functionName) {
      return "" + functionName + " (" + fileLocation + ")";
    } else {
      return fileLocation;
    }
  };

  sourceMaps = {};

  getSourceMap = function(filename) {
    var answer, _ref1;
    if (sourceMaps[filename]) {
      return sourceMaps[filename];
    }
    if (_ref1 = path != null ? path.extname(filename) : void 0, __indexOf.call(exports.FILE_EXTENSIONS, _ref1) < 0) {
      return;
    }
    answer = exports._compileFile(filename, true);
    return sourceMaps[filename] = answer.sourceMap;
  };

  Error.prepareStackTrace = function(err, stack) {
    var frame, frames, getSourceMapping;
    getSourceMapping = function(filename, line, column) {
      var answer, sourceMap;
      sourceMap = getSourceMap(filename);
      if (sourceMap) {
        answer = sourceMap.sourceLocation([line - 1, column - 1]);
      }
      if (answer) {
        return [answer[0] + 1, answer[1] + 1];
      } else {
        return null;
      }
    };
    frames = (function() {
      var _j, _len1, _results;
      _results = [];
      for (_j = 0, _len1 = stack.length; _j < _len1; _j++) {
        frame = stack[_j];
        if (frame.getFunction() === exports.run) {
          break;
        }
        _results.push("  at " + (formatSourcePosition(frame, getSourceMapping)));
      }
      return _results;
    })();
    return "" + (err.toString()) + "\n" + (frames.join('\n')) + "\n";
  };

}).call(this);

}).call(this,_dereq_("FWaASH"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./helpers":3,"./iced":4,"./lexer":5,"./nodes":6,"./parser":7,"./register":8,"./sourcemap":11,"FWaASH":14,"fs":12,"iced-runtime":19,"module":12,"path":13,"vm":15}],3:[function(_dereq_,module,exports){
(function (process){
// Generated by IcedCoffeeScript 1.8.0-c
(function() {
  var buildLocationData, extend, flatten, last, repeat, syntaxErrorToString, _ref;

  exports.starts = function(string, literal, start) {
    return literal === string.substr(start, literal.length);
  };

  exports.ends = function(string, literal, back) {
    var len;
    len = literal.length;
    return literal === string.substr(string.length - len - (back || 0), len);
  };

  exports.repeat = repeat = function(str, n) {
    var res;
    res = '';
    while (n > 0) {
      if (n & 1) {
        res += str;
      }
      n >>>= 1;
      str += str;
    }
    return res;
  };

  exports.compact = function(array) {
    var item, _i, _len, _results;
    _results = [];
    for (_i = 0, _len = array.length; _i < _len; _i++) {
      item = array[_i];
      if (item) {
        _results.push(item);
      }
    }
    return _results;
  };

  exports.count = function(string, substr) {
    var num, pos;
    num = pos = 0;
    if (!substr.length) {
      return 1 / 0;
    }
    while (pos = 1 + string.indexOf(substr, pos)) {
      num++;
    }
    return num;
  };

  exports.merge = function(options, overrides) {
    return extend(extend({}, options), overrides);
  };

  extend = exports.extend = function(object, properties) {
    var key, val;
    for (key in properties) {
      val = properties[key];
      object[key] = val;
    }
    return object;
  };

  exports.flatten = flatten = function(array) {
    var element, flattened, _i, _len;
    flattened = [];
    for (_i = 0, _len = array.length; _i < _len; _i++) {
      element = array[_i];
      if (element instanceof Array) {
        flattened = flattened.concat(flatten(element));
      } else {
        flattened.push(element);
      }
    }
    return flattened;
  };

  exports.del = function(obj, key) {
    var val;
    val = obj[key];
    delete obj[key];
    return val;
  };

  exports.last = last = function(array, back) {
    return array[array.length - (back || 0) - 1];
  };

  exports.some = (_ref = Array.prototype.some) != null ? _ref : function(fn) {
    var e, _i, _len;
    for (_i = 0, _len = this.length; _i < _len; _i++) {
      e = this[_i];
      if (fn(e)) {
        return true;
      }
    }
    return false;
  };

  exports.invertLiterate = function(code) {
    var line, lines, maybe_code;
    maybe_code = true;
    lines = (function() {
      var _i, _len, _ref1, _results;
      _ref1 = code.split('\n');
      _results = [];
      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
        line = _ref1[_i];
        if (maybe_code && /^([ ]{4}|[ ]{0,3}\t)/.test(line)) {
          _results.push(line);
        } else if (maybe_code = /^\s*$/.test(line)) {
          _results.push(line);
        } else {
          _results.push('# ' + line);
        }
      }
      return _results;
    })();
    return lines.join('\n');
  };

  buildLocationData = function(first, last) {
    if (!last) {
      return first;
    } else {
      return {
        first_line: first.first_line,
        first_column: first.first_column,
        last_line: last.last_line,
        last_column: last.last_column
      };
    }
  };

  exports.addLocationDataFn = function(first, last) {
    return function(obj) {
      if (((typeof obj) === 'object') && (!!obj['updateLocationDataIfMissing'])) {
        obj.updateLocationDataIfMissing(buildLocationData(first, last));
      }
      return obj;
    };
  };

  exports.locationDataToString = function(obj) {
    var locationData;
    if (("2" in obj) && ("first_line" in obj[2])) {
      locationData = obj[2];
    } else if ("first_line" in obj) {
      locationData = obj;
    }
    if (locationData) {
      return ("" + (locationData.first_line + 1) + ":" + (locationData.first_column + 1) + "-") + ("" + (locationData.last_line + 1) + ":" + (locationData.last_column + 1));
    } else {
      return "No location data";
    }
  };

  exports.baseFileName = function(file, stripExt, useWinPathSep) {
    var parts, pathSep;
    if (stripExt == null) {
      stripExt = false;
    }
    if (useWinPathSep == null) {
      useWinPathSep = false;
    }
    pathSep = useWinPathSep ? /\\|\// : /\//;
    parts = file.split(pathSep);
    file = parts[parts.length - 1];
    if (!(stripExt && file.indexOf('.') >= 0)) {
      return file;
    }
    parts = file.split('.');
    parts.pop();
    if (parts[parts.length - 1] === 'coffee' && parts.length > 1) {
      parts.pop();
    }
    return parts.join('.');
  };

  exports.isCoffee = function(file) {
    return /\.((lit)?coffee|coffee\.md|iced|liticed|iced\.md)$/.test(file);
  };

  exports.isLiterate = function(file) {
    return /\.(litcoffee|coffee\.md|liticed|iced\.md)$/.test(file);
  };

  exports.throwSyntaxError = function(message, location) {
    var error;
    error = new SyntaxError(message);
    error.location = location;
    error.toString = syntaxErrorToString;
    error.stack = error.toString();
    throw error;
  };

  exports.updateSyntaxError = function(error, code, filename) {
    if (error.toString === syntaxErrorToString) {
      error.code || (error.code = code);
      error.filename || (error.filename = filename);
      error.stack = error.toString();
    }
    return error;
  };

  syntaxErrorToString = function() {
    var codeLine, colorize, colorsEnabled, end, filename, first_column, first_line, last_column, last_line, marker, start, _ref1, _ref2;
    if (!(this.code && this.location)) {
      return Error.prototype.toString.call(this);
    }
    _ref1 = this.location, first_line = _ref1.first_line, first_column = _ref1.first_column, last_line = _ref1.last_line, last_column = _ref1.last_column;
    if (last_line == null) {
      last_line = first_line;
    }
    if (last_column == null) {
      last_column = first_column;
    }
    filename = this.filename || '[stdin]';
    codeLine = this.code.split('\n')[first_line];
    start = first_column;
    end = first_line === last_line ? last_column + 1 : codeLine.length;
    marker = codeLine.slice(0, start).replace(/[^\s]/g, ' ') + repeat('^', end - start);
    if ((typeof process !== "undefined" && process !== null ? process.stdout : void 0) != null) {
      colorsEnabled = process.stdout.isTTY && !process.env.NODE_DISABLE_COLORS;
    }
    if ((_ref2 = this.colorful) != null ? _ref2 : colorsEnabled) {
      colorize = function(str) {
        return "\x1B[1;31m" + str + "\x1B[0m";
      };
      codeLine = codeLine.slice(0, start) + colorize(codeLine.slice(start, end)) + codeLine.slice(end);
      marker = colorize(marker);
    }
    return "" + filename + ":" + (first_line + 1) + ":" + (first_column + 1) + ": error: " + this.message + "\n" + codeLine + "\n" + marker;
  };

  exports.nameWhitespaceCharacter = function(string) {
    switch (string) {
      case ' ':
        return 'space';
      case '\n':
        return 'newline';
      case '\r':
        return 'carriage return';
      case '\t':
        return 'tab';
      default:
        return string;
    }
  };

}).call(this);

}).call(this,_dereq_("FWaASH"))
},{"FWaASH":14}],4:[function(_dereq_,module,exports){
// Generated by IcedCoffeeScript 1.8.0-c
(function() {
  exports.transform = function(x, options) {
    return x.icedTransform(options);
  };

  exports.runtime = _dereq_('iced-runtime');

}).call(this);

},{"iced-runtime":19}],5:[function(_dereq_,module,exports){
// Generated by IcedCoffeeScript 1.8.0-c
(function() {
  var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDENTABLE_CLOSERS, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, UNARY_MATH, WHITESPACE, compact, count, invertLiterate, key, last, locationDataToString, repeat, starts, throwSyntaxError, _ref, _ref1,
    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };

  _ref = _dereq_('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES;

  _ref1 = _dereq_('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, repeat = _ref1.repeat, invertLiterate = _ref1.invertLiterate, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;

  exports.Lexer = Lexer = (function() {
    function Lexer() {}

    Lexer.prototype.tokenize = function(code, opts) {
      var consumed, i, tag, _ref2;
      if (opts == null) {
        opts = {};
      }
      this.literate = opts.literate;
      this.indent = 0;
      this.baseIndent = 0;
      this.indebt = 0;
      this.outdebt = 0;
      this.indents = [];
      this.ends = [];
      this.tokens = [];
      this.chunkLine = opts.line || 0;
      this.chunkColumn = opts.column || 0;
      code = this.clean(code);
      i = 0;
      while (this.chunk = code.slice(i)) {
        consumed = this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken();
        _ref2 = this.getLineAndColumnFromChunk(consumed), this.chunkLine = _ref2[0], this.chunkColumn = _ref2[1];
        i += consumed;
      }
      this.closeIndentation();
      if (tag = this.ends.pop()) {
        this.error("missing " + tag);
      }
      if (opts.rewrite === false) {
        return this.tokens;
      }
      return (new Rewriter).rewrite(this.tokens);
    };

    Lexer.prototype.clean = function(code) {
      if (code.charCodeAt(0) === BOM) {
        code = code.slice(1);
      }
      code = code.replace(/\r/g, '').replace(TRAILING_SPACES, '');
      if (WHITESPACE.test(code)) {
        code = "\n" + code;
        this.chunkLine--;
      }
      if (this.literate) {
        code = invertLiterate(code);
      }
      return code;
    };

    Lexer.prototype.identifierToken = function() {
      var colon, colonOffset, forcedIdentifier, id, idLength, input, match, poppedToken, prev, tag, tagToken, _ref2, _ref3, _ref4;
      if (!(match = IDENTIFIER.exec(this.chunk))) {
        return 0;
      }
      input = match[0], id = match[1], colon = match[2];
      idLength = id.length;
      poppedToken = void 0;
      if (id === 'own' && this.tag() === 'FOR') {
        this.token('OWN', id);
        return id.length;
      }
      if (id === 'from' && this.tag() === 'YIELD') {
        this.token('FROM', id);
        return id.length;
      }
      forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref2 = prev[0]) === '.' || _ref2 === '?.' || _ref2 === '::' || _ref2 === '?::') || !prev.spaced && prev[0] === '@') && id !== 'defer';
      tag = 'IDENTIFIER';
      if (!forcedIdentifier && (__indexOf.call(JS_KEYWORDS, id) >= 0 || __indexOf.call(COFFEE_KEYWORDS, id) >= 0)) {
        tag = id.toUpperCase();
        if (tag === 'WHEN' && (_ref3 = this.tag(), __indexOf.call(LINE_BREAK, _ref3) >= 0)) {
          tag = 'LEADING_WHEN';
        } else if (tag === 'FOR') {
          this.seenFor = true;
        } else if (tag === 'UNLESS') {
          tag = 'IF';
        } else if (__indexOf.call(UNARY, tag) >= 0) {
          tag = 'UNARY';
        } else if (__indexOf.call(RELATION, tag) >= 0) {
          if (tag !== 'INSTANCEOF' && this.seenFor) {
            tag = 'FOR' + tag;
            this.seenFor = false;
          } else {
            tag = 'RELATION';
            if (this.value() === '!') {
              poppedToken = this.tokens.pop();
              id = '!' + id;
            }
          }
        }
      }
      if (__indexOf.call(JS_FORBIDDEN, id) >= 0) {
        if (forcedIdentifier) {
          tag = 'IDENTIFIER';
          id = new String(id);
          id.reserved = true;
        } else if (__indexOf.call(RESERVED, id) >= 0) {
          this.error("reserved word \"" + id + "\"");
        }
      }
      if (!forcedIdentifier) {
        if (__indexOf.call(COFFEE_ALIASES, id) >= 0) {
          id = COFFEE_ALIAS_MAP[id];
        }
        tag = (function() {
          switch (id) {
            case '!':
              return 'UNARY';
            case '==':
            case '!=':
              return 'COMPARE';
            case '&&':
            case '||':
              return 'LOGIC';
            case 'true':
            case 'false':
              return 'BOOL';
            case 'break':
            case 'continue':
              return 'STATEMENT';
            default:
              return tag;
          }
        })();
      }
      tagToken = this.token(tag, id, 0, idLength);
      if (poppedToken) {
        _ref4 = [poppedToken[2].first_line, poppedToken[2].first_column], tagToken[2].first_line = _ref4[0], tagToken[2].first_column = _ref4[1];
      }
      if (colon) {
        colonOffset = input.lastIndexOf(':');
        this.token(':', ':', colonOffset, colon.length);
      }
      return input.length;
    };

    Lexer.prototype.numberToken = function() {
      var binaryLiteral, lexedLength, match, number, octalLiteral;
      if (!(match = NUMBER.exec(this.chunk))) {
        return 0;
      }
      number = match[0];
      if (/^0[BOX]/.test(number)) {
        this.error("radix prefix '" + number + "' must be lowercase");
      } else if (/E/.test(number) && !/^0x/.test(number)) {
        this.error("exponential notation '" + number + "' must be indicated with a lowercase 'e'");
      } else if (/^0\d*[89]/.test(number)) {
        this.error("decimal literal '" + number + "' must not be prefixed with '0'");
      } else if (/^0\d+/.test(number)) {
        this.error("octal literal '" + number + "' must be prefixed with '0o'");
      }
      lexedLength = number.length;
      if (octalLiteral = /^0o([0-7]+)/.exec(number)) {
        number = '0x' + parseInt(octalLiteral[1], 8).toString(16);
      }
      if (binaryLiteral = /^0b([01]+)/.exec(number)) {
        number = '0x' + parseInt(binaryLiteral[1], 2).toString(16);
      }
      this.token('NUMBER', number, 0, lexedLength);
      return lexedLength;
    };

    Lexer.prototype.stringToken = function() {
      var inner, innerLen, numBreak, octalEsc, pos, quote, string, trimmed;
      switch (quote = this.chunk.charAt(0)) {
        case "'":
          string = (SIMPLESTR.exec(this.chunk) || [])[0];
          break;
        case '"':
          string = this.balancedString(this.chunk, '"');
      }
      if (!string) {
        return 0;
      }
      inner = string.slice(1, -1);
      trimmed = this.removeNewlines(inner);
      if (quote === '"' && 0 < string.indexOf('#{', 1)) {
        numBreak = pos = 0;
        innerLen = inner.length;
        while (inner.charAt(pos++) === '\n' && pos < innerLen) {
          numBreak++;
        }
        this.interpolateString(trimmed, {
          strOffset: 1 + numBreak,
          lexedLength: string.length
        });
      } else {
        this.token('STRING', quote + this.escapeLines(trimmed) + quote, 0, string.length);
      }
      if (octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(string)) {
        this.error("octal escape sequences " + string + " are not allowed");
      }
      return string.length;
    };

    Lexer.prototype.heredocToken = function() {
      var doc, heredoc, match, quote, strOffset;
      if (!(match = HEREDOC.exec(this.chunk))) {
        return 0;
      }
      heredoc = match[0];
      quote = heredoc.charAt(0);
      doc = this.sanitizeHeredoc(match[2], {
        quote: quote,
        indent: null
      });
      if (quote === '"' && 0 <= doc.indexOf('#{')) {
        strOffset = match[2].charAt(0) === '\n' ? 4 : 3;
        this.interpolateString(doc, {
          heredoc: true,
          strOffset: strOffset,
          lexedLength: heredoc.length
        });
      } else {
        this.token('STRING', this.makeString(doc, quote, true), 0, heredoc.length);
      }
      return heredoc.length;
    };

    Lexer.prototype.commentToken = function() {
      var comment, here, match;
      if (!(match = this.chunk.match(COMMENT))) {
        return 0;
      }
      comment = match[0], here = match[1];
      if (here) {
        this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
          herecomment: true,
          indent: repeat(' ', this.indent)
        }), 0, comment.length);
      }
      return comment.length;
    };

    Lexer.prototype.jsToken = function() {
      var match, script;
      if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
        return 0;
      }
      this.token('JS', (script = match[0]).slice(1, -1), 0, script.length);
      return script.length;
    };

    Lexer.prototype.regexToken = function() {
      var flags, length, match, prev, regex, _ref2, _ref3;
      if (this.chunk.charAt(0) !== '/') {
        return 0;
      }
      if (length = this.heregexToken()) {
        return length;
      }
      prev = last(this.tokens);
      if (prev && (_ref2 = prev[0], __indexOf.call((prev.spaced ? NOT_REGEX : NOT_SPACED_REGEX), _ref2) >= 0)) {
        return 0;
      }
      if (!(match = REGEX.exec(this.chunk))) {
        return 0;
      }
      _ref3 = match, match = _ref3[0], regex = _ref3[1], flags = _ref3[2];
      if (regex === '//') {
        return 0;
      }
      if (regex.slice(0, 2) === '/*') {
        this.error('regular expressions cannot begin with `*`');
      }
      this.token('REGEX', "" + regex + flags, 0, match.length);
      return match.length;
    };

    Lexer.prototype.heregexToken = function() {
      var body, flags, flagsOffset, heregex, match, plusToken, prev, re, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
      if (!(match = HEREGEX.exec(this.chunk))) {
        return 0;
      }
      heregex = match[0], body = match[1], flags = match[2];
      if (0 > body.indexOf('#{')) {
        re = this.escapeLines(body.replace(HEREGEX_OMIT, '$1$2').replace(/\//g, '\\/'), true);
        if (re.match(/^\*/)) {
          this.error('regular expressions cannot begin with `*`');
        }
        this.token('REGEX', "/" + (re || '(?:)') + "/" + flags, 0, heregex.length);
        return heregex.length;
      }
      this.token('IDENTIFIER', 'RegExp', 0, 0);
      this.token('CALL_START', '(', 0, 0);
      tokens = [];
      _ref2 = this.interpolateString(body, {
        regex: true,
        strOffset: 3
      });
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        token = _ref2[_i];
        tag = token[0], value = token[1];
        if (tag === 'TOKENS') {
          tokens.push.apply(tokens, value);
        } else if (tag === 'NEOSTRING') {
          if (!(value = value.replace(HEREGEX_OMIT, '$1$2'))) {
            continue;
          }
          value = value.replace(/\\/g, '\\\\');
          token[0] = 'STRING';
          token[1] = this.makeString(value, '"', true);
          tokens.push(token);
        } else {
          this.error("Unexpected " + tag);
        }
        prev = last(this.tokens);
        plusToken = ['+', '+'];
        plusToken[2] = prev[2];
        tokens.push(plusToken);
      }
      tokens.pop();
      if (((_ref3 = tokens[0]) != null ? _ref3[0] : void 0) !== 'STRING') {
        this.token('STRING', '""', 0, 0);
        this.token('+', '+', 0, 0);
      }
      (_ref4 = this.tokens).push.apply(_ref4, tokens);
      if (flags) {
        flagsOffset = heregex.lastIndexOf(flags);
        this.token(',', ',', flagsOffset, 0);
        this.token('STRING', '"' + flags + '"', flagsOffset, flags.length);
      }
      this.token(')', ')', heregex.length - 1, 0);
      return heregex.length;
    };

    Lexer.prototype.lineToken = function() {
      var diff, indent, match, noNewlines, size;
      if (!(match = MULTI_DENT.exec(this.chunk))) {
        return 0;
      }
      indent = match[0];
      this.seenFor = false;
      size = indent.length - 1 - indent.lastIndexOf('\n');
      noNewlines = this.unfinished();
      if (size - this.indebt === this.indent) {
        if (noNewlines) {
          this.suppressNewlines();
        } else {
          this.newlineToken(0);
        }
        return indent.length;
      }
      if (size > this.indent) {
        if (noNewlines) {
          this.indebt = size - this.indent;
          this.suppressNewlines();
          return indent.length;
        }
        if (!this.tokens.length) {
          this.baseIndent = this.indent = size;
          return indent.length;
        }
        diff = size - this.indent + this.outdebt;
        this.token('INDENT', diff, indent.length - size, size);
        this.indents.push(diff);
        this.ends.push('OUTDENT');
        this.outdebt = this.indebt = 0;
        this.indent = size;
      } else if (size < this.baseIndent) {
        this.error('missing indentation', indent.length);
      } else {
        this.indebt = 0;
        this.outdentToken(this.indent - size, noNewlines, indent.length);
      }
      return indent.length;
    };

    Lexer.prototype.outdentToken = function(moveOut, noNewlines, outdentLength) {
      var decreasedIndent, dent, lastIndent, _ref2;
      decreasedIndent = this.indent - moveOut;
      while (moveOut > 0) {
        lastIndent = this.indents[this.indents.length - 1];
        if (!lastIndent) {
          moveOut = 0;
        } else if (lastIndent === this.outdebt) {
          moveOut -= this.outdebt;
          this.outdebt = 0;
        } else if (lastIndent < this.outdebt) {
          this.outdebt -= lastIndent;
          moveOut -= lastIndent;
        } else {
          dent = this.indents.pop() + this.outdebt;
          if (outdentLength && (_ref2 = this.chunk[outdentLength], __indexOf.call(INDENTABLE_CLOSERS, _ref2) >= 0)) {
            decreasedIndent -= dent - moveOut;
            moveOut = dent;
          }
          this.outdebt = 0;
          this.pair('OUTDENT');
          this.token('OUTDENT', moveOut, 0, outdentLength);
          moveOut -= dent;
        }
      }
      if (dent) {
        this.outdebt -= moveOut;
      }
      while (this.value() === ';') {
        this.tokens.pop();
      }
      if (!(this.tag() === 'TERMINATOR' || noNewlines)) {
        this.token('TERMINATOR', '\n', outdentLength, 0);
      }
      this.indent = decreasedIndent;
      return this;
    };

    Lexer.prototype.whitespaceToken = function() {
      var match, nline, prev;
      if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) {
        return 0;
      }
      prev = last(this.tokens);
      if (prev) {
        prev[match ? 'spaced' : 'newLine'] = true;
      }
      if (match) {
        return match[0].length;
      } else {
        return 0;
      }
    };

    Lexer.prototype.newlineToken = function(offset) {
      while (this.value() === ';') {
        this.tokens.pop();
      }
      if (this.tag() !== 'TERMINATOR') {
        this.token('TERMINATOR', '\n', offset, 0);
      }
      return this;
    };

    Lexer.prototype.suppressNewlines = function() {
      if (this.value() === '\\') {
        this.tokens.pop();
      }
      return this;
    };

    Lexer.prototype.literalToken = function() {
      var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
      if (match = OPERATOR.exec(this.chunk)) {
        value = match[0];
        if (CODE.test(value)) {
          this.tagParameters();
        }
      } else {
        value = this.chunk.charAt(0);
      }
      tag = value;
      prev = last(this.tokens);
      if (value === '=' && prev) {
        if (!prev[1].reserved && (_ref2 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref2) >= 0)) {
          this.error("reserved word \"" + (this.value()) + "\" can't be assigned");
        }
        if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') {
          prev[0] = 'COMPOUND_ASSIGN';
          prev[1] += '=';
          return value.length;
        }
      }
      if (value === ';') {
        this.seenFor = false;
        tag = 'TERMINATOR';
      } else if (__indexOf.call(MATH, value) >= 0) {
        tag = 'MATH';
      } else if (__indexOf.call(COMPARE, value) >= 0) {
        tag = 'COMPARE';
      } else if (__indexOf.call(COMPOUND_ASSIGN, value) >= 0) {
        tag = 'COMPOUND_ASSIGN';
      } else if (__indexOf.call(UNARY, value) >= 0) {
        tag = 'UNARY';
      } else if (__indexOf.call(UNARY_MATH, value) >= 0) {
        tag = 'UNARY_MATH';
      } else if (__indexOf.call(SHIFT, value) >= 0) {
        tag = 'SHIFT';
      } else if (__indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) {
        tag = 'LOGIC';
      } else if (prev && !prev.spaced) {
        if (value === '(' && (_ref4 = prev[0], __indexOf.call(CALLABLE, _ref4) >= 0)) {
          if (prev[0] === '?') {
            prev[0] = 'FUNC_EXIST';
          }
          tag = 'CALL_START';
        } else if (value === '[' && (_ref5 = prev[0], __indexOf.call(INDEXABLE, _ref5) >= 0)) {
          tag = 'INDEX_START';
          switch (prev[0]) {
            case '?':
              prev[0] = 'INDEX_SOAK';
          }
        }
      }
      switch (value) {
        case '(':
        case '{':
        case '[':
          this.ends.push(INVERSES[value]);
          break;
        case ')':
        case '}':
        case ']':
          this.pair(value);
      }
      this.token(tag, value);
      return value.length;
    };

    Lexer.prototype.sanitizeHeredoc = function(doc, options) {
      var attempt, herecomment, indent, match, _ref2;
      indent = options.indent, herecomment = options.herecomment;
      if (herecomment) {
        if (HEREDOC_ILLEGAL.test(doc)) {
          this.error("block comment cannot contain \"*/\", starting");
        }
        if (doc.indexOf('\n') < 0) {
          return doc;
        }
      } else {
        while (match = HEREDOC_INDENT.exec(doc)) {
          attempt = match[1];
          if (indent === null || (0 < (_ref2 = attempt.length) && _ref2 < indent.length)) {
            indent = attempt;
          }
        }
      }
      if (indent) {
        doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
      }
      if (!herecomment) {
        doc = doc.replace(/^\n/, '');
      }
      return doc;
    };

    Lexer.prototype.tagParameters = function() {
      var i, stack, tok, tokens;
      if (this.tag() !== ')') {
        return this;
      }
      stack = [];
      tokens = this.tokens;
      i = tokens.length;
      tokens[--i][0] = 'PARAM_END';
      while (tok = tokens[--i]) {
        switch (tok[0]) {
          case ')':
            stack.push(tok);
            break;
          case '(':
          case 'CALL_START':
            if (stack.length) {
              stack.pop();
            } else if (tok[0] === '(') {
              tok[0] = 'PARAM_START';
              return this;
            } else {
              return this;
            }
        }
      }
      return this;
    };

    Lexer.prototype.closeIndentation = function() {
      return this.outdentToken(this.indent);
    };

    Lexer.prototype.balancedString = function(str, end) {
      var continueCount, i, letter, match, prev, stack, _i, _ref2;
      continueCount = 0;
      stack = [end];
      for (i = _i = 1, _ref2 = str.length; 1 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 1 <= _ref2 ? ++_i : --_i) {
        if (continueCount) {
          --continueCount;
          continue;
        }
        switch (letter = str.charAt(i)) {
          case '\\':
            ++continueCount;
            continue;
          case end:
            stack.pop();
            if (!stack.length) {
              return str.slice(0, +i + 1 || 9e9);
            }
            end = stack[stack.length - 1];
            continue;
        }
        if (end === '}' && (letter === '"' || letter === "'")) {
          stack.push(end = letter);
        } else if (end === '}' && letter === '/' && (match = HEREGEX.exec(str.slice(i)) || REGEX.exec(str.slice(i)))) {
          continueCount += match[0].length - 1;
        } else if (end === '}' && letter === '{') {
          stack.push(end = '}');
        } else if (end === '"' && prev === '#' && letter === '{') {
          stack.push(end = '}');
        }
        prev = letter;
      }
      return this.error("missing " + (stack.pop()) + ", starting");
    };

    Lexer.prototype.interpolateString = function(str, options) {
      var column, errorToken, expr, heredoc, i, inner, interpolated, len, letter, lexedLength, line, locationToken, nested, offsetInChunk, pi, plusToken, popped, regex, rparen, strOffset, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
      if (options == null) {
        options = {};
      }
      heredoc = options.heredoc, regex = options.regex, offsetInChunk = options.offsetInChunk, strOffset = options.strOffset, lexedLength = options.lexedLength;
      offsetInChunk || (offsetInChunk = 0);
      strOffset || (strOffset = 0);
      lexedLength || (lexedLength = str.length);
      tokens = [];
      pi = 0;
      i = -1;
      while (letter = str.charAt(i += 1)) {
        if (letter === '\\') {
          i += 1;
          continue;
        }
        if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), '}')))) {
          continue;
        }
        if (pi < i) {
          tokens.push(this.makeToken('NEOSTRING', str.slice(pi, i), strOffset + pi));
        }
        if (!errorToken) {
          errorToken = this.makeToken('', 'string interpolation', offsetInChunk + i + 1, 2);
        }
        inner = expr.slice(1, -1);
        if (inner.length) {
          _ref2 = this.getLineAndColumnFromChunk(strOffset + i + 2), line = _ref2[0], column = _ref2[1];
          nested = new Lexer().tokenize(inner, {
            line: line,
            column: column,
            rewrite: false
          });
          popped = nested.pop();
          if (((_ref3 = nested[0]) != null ? _ref3[0] : void 0) === 'TERMINATOR') {
            popped = nested.shift();
          }
          if (len = nested.length) {
            if (len > 1) {
              nested.unshift(this.makeToken('(', '(', strOffset + i + 1, 0));
              nested.push(this.makeToken(')', ')', strOffset + i + 1 + inner.length, 0));
            }
            tokens.push(['TOKENS', nested]);
          }
        }
        i += expr.length;
        pi = i + 1;
      }
      if ((i > pi && pi < str.length)) {
        tokens.push(this.makeToken('NEOSTRING', str.slice(pi), strOffset + pi));
      }
      if (regex) {
        return tokens;
      }
      if (!tokens.length) {
        return this.token('STRING', '""', offsetInChunk, lexedLength);
      }
      if (tokens[0][0] !== 'NEOSTRING') {
        tokens.unshift(this.makeToken('NEOSTRING', '', offsetInChunk));
      }
      if (interpolated = tokens.length > 1) {
        this.token('(', '(', offsetInChunk, 0, errorToken);
      }
      for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) {
        token = tokens[i];
        tag = token[0], value = token[1];
        if (i) {
          if (i) {
            plusToken = this.token('+', '+');
          }
          locationToken = tag === 'TOKENS' ? value[0] : token;
          plusToken[2] = {
            first_line: locationToken[2].first_line,
            first_column: locationToken[2].first_column,
            last_line: locationToken[2].first_line,
            last_column: locationToken[2].first_column
          };
        }
        if (tag === 'TOKENS') {
          (_ref4 = this.tokens).push.apply(_ref4, value);
        } else if (tag === 'NEOSTRING') {
          token[0] = 'STRING';
          token[1] = this.makeString(value, '"', heredoc);
          this.tokens.push(token);
        } else {
          this.error("Unexpected " + tag);
        }
      }
      if (interpolated) {
        rparen = this.makeToken(')', ')', offsetInChunk + lexedLength, 0);
        rparen.stringEnd = true;
        this.tokens.push(rparen);
      }
      return tokens;
    };

    Lexer.prototype.pair = function(tag) {
      var wanted;
      if (tag !== (wanted = last(this.ends))) {
        if ('OUTDENT' !== wanted) {
          this.error("unmatched " + tag);
        }
        this.outdentToken(last(this.indents), true);
        return this.pair(tag);
      }
      return this.ends.pop();
    };

    Lexer.prototype.getLineAndColumnFromChunk = function(offset) {
      var column, lineCount, lines, string;
      if (offset === 0) {
        return [this.chunkLine, this.chunkColumn];
      }
      if (offset >= this.chunk.length) {
        string = this.chunk;
      } else {
        string = this.chunk.slice(0, +(offset - 1) + 1 || 9e9);
      }
      lineCount = count(string, '\n');
      column = this.chunkColumn;
      if (lineCount > 0) {
        lines = string.split('\n');
        column = last(lines).length;
      } else {
        column += string.length;
      }
      return [this.chunkLine + lineCount, column];
    };

    Lexer.prototype.makeToken = function(tag, value, offsetInChunk, length) {
      var lastCharacter, locationData, token, _ref2, _ref3;
      if (offsetInChunk == null) {
        offsetInChunk = 0;
      }
      if (length == null) {
        length = value.length;
      }
      locationData = {};
      _ref2 = this.getLineAndColumnFromChunk(offsetInChunk), locationData.first_line = _ref2[0], locationData.first_column = _ref2[1];
      lastCharacter = Math.max(0, length - 1);
      _ref3 = this.getLineAndColumnFromChunk(offsetInChunk + lastCharacter), locationData.last_line = _ref3[0], locationData.last_column = _ref3[1];
      token = [tag, value, locationData];
      return token;
    };

    Lexer.prototype.token = function(tag, value, offsetInChunk, length, origin) {
      var token;
      token = this.makeToken(tag, value, offsetInChunk, length);
      if (origin) {
        token.origin = origin;
      }
      this.tokens.push(token);
      return token;
    };

    Lexer.prototype.tag = function(index, tag) {
      var tok;
      return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]);
    };

    Lexer.prototype.value = function(index, val) {
      var tok;
      return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]);
    };

    Lexer.prototype.unfinished = function() {
      var _ref2;
      return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === '?::' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === 'UNARY_MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'YIELD' || _ref2 === '**' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS');
    };

    Lexer.prototype.removeNewlines = function(str) {
      return str.replace(/^\s*\n\s*/, '').replace(/([^\\]|\\\\)\s*\n\s*$/, '$1');
    };

    Lexer.prototype.escapeLines = function(str, heredoc) {
      str = str.replace(/\\[^\S\n]*(\n|\\)\s*/g, function(escaped, character) {
        if (character === '\n') {
          return '';
        } else {
          return escaped;
        }
      });
      if (heredoc) {
        return str.replace(MULTILINER, '\\n');
      } else {
        return str.replace(/\s*\n\s*/g, ' ');
      }
    };

    Lexer.prototype.makeString = function(body, quote, heredoc) {
      if (!body) {
        return quote + quote;
      }
      body = body.replace(RegExp("\\\\(" + quote + "|\\\\)", "g"), function(match, contents) {
        if (contents === quote) {
          return contents;
        } else {
          return match;
        }
      });
      body = body.replace(RegExp("" + quote, "g"), '\\$&');
      return quote + this.escapeLines(body, heredoc) + quote;
    };

    Lexer.prototype.error = function(message, offset) {
      var first_column, first_line, _ref2;
      if (offset == null) {
        offset = 0;
      }
      _ref2 = this.getLineAndColumnFromChunk(offset), first_line = _ref2[0], first_column = _ref2[1];
      return throwSyntaxError(message, {
        first_line: first_line,
        first_column: first_column
      });
    };

    return Lexer;

  })();

  JS_KEYWORDS = ['true', 'false', 'null', 'this', 'new', 'delete', 'typeof', 'in', 'instanceof', 'return', 'throw', 'break', 'continue', 'debugger', 'yield', 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally', 'class', 'extends', 'super'];

  COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'];

  COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(['await', 'defer']);

  COFFEE_ALIAS_MAP = {
    and: '&&',
    or: '||',
    is: '==',
    isnt: '!=',
    not: '!',
    yes: 'true',
    no: 'false',
    on: 'true',
    off: 'false'
  };

  COFFEE_ALIASES = (function() {
    var _results;
    _results = [];
    for (key in COFFEE_ALIAS_MAP) {
      _results.push(key);
    }
    return _results;
  })();

  COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(COFFEE_ALIASES);

  RESERVED = ['case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', '__hasProp', '__extends', '__slice', '__bind', '__indexOf', 'implements', 'interface', 'package', 'private', 'protected', 'public', 'static'];

  STRICT_PROSCRIBED = ['arguments', 'eval', 'yield*'];

  JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED).concat(STRICT_PROSCRIBED);

  exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS).concat(STRICT_PROSCRIBED);

  exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED;

  BOM = 65279;

  IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/;

  NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;

  HEREDOC = /^("""|''')((?:\\[\s\S]|[^\\])*?)(?:\n[^\n\S]*)?\1/;

  OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>*\/%])\2=?|\?(\.|::)|\.{2,3})/;

  WHITESPACE = /^[^\n\S]+/;

  COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|###$)|^(?:\s*#(?!##[^#]).*)+/;

  CODE = /^[-=]>/;

  MULTI_DENT = /^(?:\n[^\n\S]*)+/;

  SIMPLESTR = /^'[^\\']*(?:\\[\s\S][^\\']*)*'/;

  JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/;

  REGEX = /^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/;

  HEREGEX = /^\/{3}((?:\\?[\s\S])+?)\/{3}([imgy]{0,4})(?!\w)/;

  HEREGEX_OMIT = /((?:\\\\)+)|\\(\s|\/)|\s+(?:#.*)?/g;

  MULTILINER = /\n/g;

  HEREDOC_INDENT = /\n+([^\n\S]*)/g;

  HEREDOC_ILLEGAL = /\*\//;

  LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/;

  TRAILING_SPACES = /\s+$/;

  COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|=', '**=', '//=', '%%='];

  UNARY = ['NEW', 'TYPEOF', 'DELETE', 'DO'];

  UNARY_MATH = ['!', '~'];

  LOGIC = ['&&', '||', '&', '|', '^'];

  SHIFT = ['<<', '>>', '>>>'];

  COMPARE = ['==', '!=', '<', '>', '<=', '>='];

  MATH = ['*', '/', '%', '//', '%%'];

  RELATION = ['IN', 'OF', 'INSTANCEOF'];

  BOOL = ['TRUE', 'FALSE'];

  NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--'];

  NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING', ']');

  CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];

  INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL', 'NULL', 'UNDEFINED');

  LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR'];

  INDENTABLE_CLOSERS = [')', '}', ']'];

  CALLABLE.push('DEFER');

}).call(this);

},{"./helpers":3,"./rewriter":9}],6:[function(_dereq_,module,exports){
(function (__dirname){
// Generated by IcedCoffeeScript 1.8.0-c
(function() {
  var Access, Arr, Assign, Await, Base, Block, Call, Class, Closure, Code, CodeFragment, Comment, CpsCascade, Defer, Existence, Expansion, Extends, For, HEXNUM, IDENTIFIER, IDENTIFIER_STR, IS_REGEX, IS_STRING, IcedReturnValue, IcedRuntime, IcedTailCall, If, In, Index, InlineRuntime, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, NULL, NUMBER, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Slot, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, addLocationDataFn, compact, del, ends, extend, flatten, fragmentsToText, iced, isLiteralArguments, isLiteralThis, last, locationDataToString, merge, multident, parseNum, pathmod, quote_path_for_emission, require_top_dir, some, starts, throwSyntaxError, unfoldSoak, utility, _ref, _ref1,
    __hasProp = {}.hasOwnProperty,
    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
    __slice = [].slice;

  Error.stackTraceLimit = Infinity;

  Scope = _dereq_('./scope').Scope;

  _ref = _dereq_('./lexer'), RESERVED = _ref.RESERVED, STRICT_PROSCRIBED = _ref.STRICT_PROSCRIBED;

  iced = _dereq_('iced-runtime');

  pathmod = _dereq_('path');

  _ref1 = _dereq_('./helpers'), compact = _ref1.compact, flatten = _ref1.flatten, extend = _ref1.extend, merge = _ref1.merge, del = _ref1.del, starts = _ref1.starts, ends = _ref1.ends, last = _ref1.last, some = _ref1.some, addLocationDataFn = _ref1.addLocationDataFn, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;

  exports.extend = extend;

  exports.addLocationDataFn = addLocationDataFn;

  YES = function() {
    return true;
  };

  NO = function() {
    return false;
  };

  THIS = function() {
    return this;
  };

  NEGATE = function() {
    this.negated = !this.negated;
    return this;
  };

  NULL = function() {
    return new Value(new Literal('null'));
  };

  exports.CodeFragment = CodeFragment = (function() {
    function CodeFragment(parent, code) {
      var _ref2;
      this.code = "" + code;
      this.locationData = parent != null ? parent.locationData : void 0;
      this.type = (parent != null ? (_ref2 = parent.constructor) != null ? _ref2.name : void 0 : void 0) || 'unknown';
    }

    CodeFragment.prototype.toString = function() {
      return "" + this.code + (this.locationData ? ": " + locationDataToString(this.locationData) : '');
    };

    return CodeFragment;

  })();

  fragmentsToText = function(fragments) {
    var fragment;
    return ((function() {
      var _i, _len, _results;
      _results = [];
      for (_i = 0, _len = fragments.length; _i < _len; _i++) {
        fragment = fragments[_i];
        _results.push(fragment.code);
      }
      return _results;
    })()).join('');
  };

  exports.Base = Base = (function() {
    function Base() {
      this.icedContinuationBlock = null;
      this.icedLoopFlag = false;
      this.icedNodeFlag = false;
      this.icedGotCpsSplitFlag = false;
      this.icedCpsPivotFlag = false;
      this.icedHasAutocbFlag = false;
      this.icedFoundArguments = false;
      this.icedParentAwait = null;
      this.icedCallContinuationFlag = false;
    }

    Base.prototype.compile = function(o, lvl) {
      return fragmentsToText(this.compileToFragments(o, lvl));
    };

    Base.prototype.compileToFragments = function(o, lvl) {
      var node;
      o = extend({}, o);
      if (lvl) {
        o.level = lvl;
      }
      node = this.unfoldSoak(o) || this;
      node.tab = o.indent;
      if (node.icedHasContinuation() && !node.icedGotCpsSplitFlag) {
        return node.icedCompileCps(o);
      } else if (o.level === LEVEL_TOP || !node.isStatement(o)) {
        return node.compileNode(o);
      } else {
        return node.compileClosure(o);
      }
    };

    Base.prototype.compileClosure = function(o) {
      var args, argumentsNode, func, jumpNode, meth;
      if (jumpNode = this.jumps()) {
        jumpNode.error('cannot use a pure statement in an expression');
      }
      o.sharedScope = true;
      this.icedClearAutocbFlags();
      func = new Code([], Block.wrap([this]));
      args = [];
      if ((argumentsNode = this.contains(isLiteralArguments)) || this.contains(isLiteralThis)) {
        args = [new Literal('this')];
        if (argumentsNode) {
          meth = 'apply';
          args.push(new Literal('arguments'));
        } else {
          meth = 'call';
        }
        func = new Value(func, [new Access(new Literal(meth))]);
      }
      return (new Call(func, args)).compileNode(o);
    };

    Base.prototype.cache = function(o, level, reused) {
      var ref, sub;
      if (!this.isComplex()) {
        ref = level ? this.compileToFragments(o, level) : this;
        return [ref, ref];
      } else {
        ref = new Literal(reused || o.scope.freeVariable('ref'));
        sub = new Assign(ref, this);
        if (level) {
          return [sub.compileToFragments(o, level), [this.makeCode(ref.value)]];
        } else {
          return [sub, ref];
        }
      }
    };

    Base.prototype.cacheToCodeFragments = function(cacheValues) {
      return [fragmentsToText(cacheValues[0]), fragmentsToText(cacheValues[1])];
    };

    Base.prototype.makeReturn = function(res) {
      var me;
      me = this.unwrapAll();
      if (res) {
        return new Call(new Literal("" + res + ".push"), [me]);
      } else {
        return new Return(me, this.icedHasAutocbFlag);
      }
    };

    Base.prototype.contains = function(pred) {
      var node;
      node = void 0;
      this.traverseChildren(false, function(n) {
        if (pred(n)) {
          node = n;
          return false;
        }
      });
      return node;
    };

    Base.prototype.lastNonComment = function(list) {
      var i;
      i = list.length;
      while (i--) {
        if (!(list[i] instanceof Comment)) {
          return list[i];
        }
      }
      return null;
    };

    Base.prototype.toString = function(idt, name) {
      var extras, tree;
      if (idt == null) {
        idt = '';
      }
      if (name == null) {
        name = this.constructor.name;
      }
      extras = [];
      if (this.icedNodeFlag) {
        extras.push("A");
      }
      if (this.icedLoopFlag) {
        extras.push("L");
      }
      if (this.icedCpsPivotFlag) {
        extras.push("P");
      }
      if (this.icedHasAutocbFlag) {
        extras.push("C");
      }
      if (this.icedParentAwait) {
        extras.push("D");
      }
      if (this.icedFoundArguments) {
        extras.push("G");
      }
      if (extras.length) {
        extras = " (" + extras.join('') + ")";
      }
      tree = '\n' + idt + name;
      tree = '\n' + idt + name;
      if (this.soak) {
        tree += '?';
      }
      tree += extras;
      this.eachChild(function(node) {
        return tree += node.toString(idt + TAB);
      });
      if (this.icedContinuationBlock) {
        idt += TAB;
        tree += '\n' + idt + "Continuation";
        tree += this.icedContinuationBlock.toString(idt + TAB);
      }
      return tree;
    };

    Base.prototype.eachChild = function(func) {
      var attr, child, _i, _j, _len, _len1, _ref2, _ref3;
      if (!this.children) {
        return this;
      }
      _ref2 = this.children;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        attr = _ref2[_i];
        if (this[attr]) {
          _ref3 = flatten([this[attr]]);
          for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
            child = _ref3[_j];
            if (func(child) === false) {
              return this;
            }
          }
        }
      }
      return this;
    };

    Base.prototype.traverseChildren = function(crossScope, func) {
      return this.eachChild(function(child) {
        var recur;
        recur = func(child);
        if (recur !== false) {
          return child.traverseChildren(crossScope, func);
        }
      });
    };

    Base.prototype.invert = function() {
      return new Op('!', this);
    };

    Base.prototype.unwrapAll = function() {
      var node;
      node = this;
      while (node !== (node = node.unwrap())) {
        continue;
      }
      return node;
    };

    Base.prototype.flattenChildren = function() {
      var attr, child, out, _i, _j, _len, _len1, _ref2, _ref3;
      out = [];
      _ref2 = this.children;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        attr = _ref2[_i];
        if (this[attr]) {
          _ref3 = flatten([this[attr]]);
          for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
            child = _ref3[_j];
            out.push(child);
          }
        }
      }
      return out;
    };

    Base.prototype.icedCompileCps = function(o) {
      var code;
      this.icedGotCpsSplitFlag = true;
      code = CpsCascade.wrap(this, this.icedContinuationBlock, null, o);
      o.sharedScope = true;
      return code.compileNode(o);
    };

    Base.prototype.icedWalkAst = function(p, o) {
      var child, _i, _len, _ref2;
      this.icedParentAwait = p;
      this.icedHasAutocbFlag = o.foundAutocb;
      _ref2 = this.flattenChildren();
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        child = _ref2[_i];
        if (child.icedWalkAst(p, o)) {
          this.icedNodeFlag = true;
        }
      }
      return this.icedNodeFlag;
    };

    Base.prototype.icedWalkAstLoops = function(flood) {
      var child, _i, _len, _ref2;
      if (this.isLoop() && this.icedNodeFlag) {
        flood = true;
      }
      if (this.isLoop() && !this.icedNodeFlag) {
        flood = false;
      }
      this.icedLoopFlag = flood;
      _ref2 = this.flattenChildren();
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        child = _ref2[_i];
        if (child.icedWalkAstLoops(flood)) {
          this.icedLoopFlag = true;
        }
      }
      return this.icedLoopFlag;
    };

    Base.prototype.icedWalkCpsPivots = function() {
      var child, _i, _len, _ref2;
      if (this.icedNodeFlag || (this.icedLoopFlag && this.icedIsJump())) {
        this.icedCpsPivotFlag = true;
      }
      _ref2 = this.flattenChildren();
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        child = _ref2[_i];
        if (child.icedWalkCpsPivots()) {
          this.icedCpsPivotFlag = true;
        }
      }
      return this.icedCpsPivotFlag;
    };

    Base.prototype.icedClearAutocbFlags = function() {
      this.icedHasAutocbFlag = false;
      return this.traverseChildren(false, function(node) {
        node.icedHasAutocbFlag = false;
        return true;
      });
    };

    Base.prototype.icedCpsRotate = function() {
      var child, _i, _len, _ref2;
      _ref2 = this.flattenChildren();
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        child = _ref2[_i];
        child.icedCpsRotate();
      }
      return this;
    };

    Base.prototype.icedIsCpsPivot = function() {
      return this.icedCpsPivotFlag;
    };

    Base.prototype.icedNestContinuationBlock = function(b) {
      return this.icedContinuationBlock = b;
    };

    Base.prototype.icedHasContinuation = function() {
      return !!this.icedContinuationBlock;
    };

    Base.prototype.icedCallContinuation = function() {
      return this.icedCallContinuationFlag = true;
    };

    Base.prototype.icedWrapContinuation = NO;

    Base.prototype.icedIsJump = NO;

    Base.prototype.icedUnwrap = function(e) {
      if (e.icedHasContinuation() && this.icedHasContinuation()) {
        return this;
      } else {
        if (this.icedHasContinuation()) {
          e.icedContinuationBlock = this.icedContinuationBlock;
        }
        return e;
      }
    };

    Base.prototype.icedStatementAssertion = function() {
      if (this.icedIsCpsPivot()) {
        return this.error("await'ed statements can't act as expressions");
      }
    };

    Base.prototype.children = [];

    Base.prototype.isStatement = NO;

    Base.prototype.jumps = NO;

    Base.prototype.isComplex = YES;

    Base.prototype.isChainable = NO;

    Base.prototype.isAssignable = NO;

    Base.prototype.isLoop = NO;

    Base.prototype.unwrap = THIS;

    Base.prototype.unfoldSoak = NO;

    Base.prototype.assigns = NO;

    Base.prototype.updateLocationDataIfMissing = function(locationData) {
      if (this.locationData) {
        return this;
      }
      this.locationData = locationData;
      return this.eachChild(function(child) {
        return child.updateLocationDataIfMissing(locationData);
      });
    };

    Base.prototype.error = function(message) {
      return throwSyntaxError(message, this.locationData);
    };

    Base.prototype.makeCode = function(code) {
      return new CodeFragment(this, code);
    };

    Base.prototype.wrapInBraces = function(fragments) {
      return [].concat(this.makeCode('('), fragments, this.makeCode(')'));
    };

    Base.prototype.joinFragmentArrays = function(fragmentsList, joinStr) {
      var answer, fragments, i, _i, _len;
      answer = [];
      for (i = _i = 0, _len = fragmentsList.length; _i < _len; i = ++_i) {
        fragments = fragmentsList[i];
        if (i) {
          answer.push(this.makeCode(joinStr));
        }
        answer = answer.concat(fragments);
      }
      return answer;
    };

    return Base;

  })();

  exports.Block = Block = (function(_super) {
    __extends(Block, _super);

    function Block(nodes) {
      Block.__super__.constructor.call(this);
      this.expressions = compact(flatten(nodes || []));
    }

    Block.prototype.children = ['expressions'];

    Block.prototype.push = function(node) {
      this.expressions.push(node);
      return this;
    };

    Block.prototype.pop = function() {
      return this.expressions.pop();
    };

    Block.prototype.unshift = function(node) {
      this.expressions.unshift(node);
      return this;
    };

    Block.prototype.unwrap = function() {
      if (this.expressions.length === 1) {
        return this.icedUnwrap(this.expressions[0]);
      } else {
        return this;
      }
    };

    Block.prototype.isEmpty = function() {
      return !this.expressions.length;
    };

    Block.prototype.isStatement = function(o) {
      var exp, _i, _len, _ref2;
      _ref2 = this.expressions;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        exp = _ref2[_i];
        if (exp.isStatement(o)) {
          return true;
        }
      }
      return false;
    };

    Block.prototype.jumps = function(o) {
      var exp, jumpNode, _i, _len, _ref2;
      _ref2 = this.expressions;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        exp = _ref2[_i];
        if (jumpNode = exp.jumps(o)) {
          return jumpNode;
        }
      }
    };

    Block.prototype.makeReturn = function(res) {
      var expr, foundReturn, len;
      len = this.expressions.length;
      foundReturn = false;
      while (len--) {
        expr = this.expressions[len];
        if (!(expr instanceof Comment)) {
          this.expressions[len] = expr.makeReturn(res);
          if (expr instanceof Return && !expr.expression && !expr.icedHasAutocbFlag) {
            this.expressions.splice(len, 1);
            foundReturn = true;
          } else if (!(expr instanceof If) || expr.elseBody) {
            foundReturn = true;
          }
          break;
        }
      }
      if (this.icedHasAutocbFlag && !this.icedNodeFlag && !foundReturn) {
        this.expressions.push(new Return(null, true));
      }
      return this;
    };

    Block.prototype.compileToFragments = function(o, level) {
      if (o == null) {
        o = {};
      }
      if (o.scope) {
        return Block.__super__.compileToFragments.call(this, o, level);
      } else {
        return this.compileRoot(o);
      }
    };

    Block.prototype.compileNode = function(o) {
      var answer, compiledNodes, fragments, index, node, top, _i, _len, _ref2;
      this.tab = o.indent;
      top = o.level === LEVEL_TOP;
      compiledNodes = [];
      _ref2 = this.expressions;
      for (index = _i = 0, _len = _ref2.length; _i < _len; index = ++_i) {
        node = _ref2[index];
        node = node.unwrapAll();
        node = node.unfoldSoak(o) || node;
        if (node instanceof Block) {
          compiledNodes.push(node.compileNode(o));
        } else if (top) {
          node.front = true;
          fragments = node.compileToFragments(o);
          if (!node.isStatement(o)) {
            fragments.unshift(this.makeCode("" + this.tab));
            fragments.push(this.makeCode(";"));
          }
          compiledNodes.push(fragments);
        } else {
          compiledNodes.push(node.compileToFragments(o, LEVEL_LIST));
        }
      }
      if (top) {
        if (this.spaced) {
          return [].concat(this.joinFragmentArrays(compiledNodes, '\n\n'), this.makeCode("\n"));
        } else {
          return this.joinFragmentArrays(compiledNodes, '\n');
        }
      }
      if (compiledNodes.length) {
        answer = this.joinFragmentArrays(compiledNodes, ', ');
      } else {
        answer = [this.makeCode("void 0")];
      }
      if (compiledNodes.length > 1 && o.level >= LEVEL_LIST) {
        return this.wrapInBraces(answer);
      } else {
        return answer;
      }
    };

    Block.prototype.compileRoot = function(o) {
      var exp, fragments, i, name, prelude, preludeExps, rest, _i, _len, _ref2;
      o.indent = o.bare ? '' : TAB;
      o.level = LEVEL_TOP;
      this.spaced = true;
      o.scope = new Scope(null, this, null);
      _ref2 = o.locals || [];
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        name = _ref2[_i];
        o.scope.parameter(name);
      }
      prelude = [];
      if (!o.bare) {
        preludeExps = (function() {
          var _j, _len1, _ref3, _results;
          _ref3 = this.expressions;
          _results = [];
          for (i = _j = 0, _len1 = _ref3.length; _j < _len1; i = ++_j) {
            exp = _ref3[i];
            if (!(exp.unwrap() instanceof Comment)) {
              break;
            }
            _results.push(exp);
          }
          return _results;
        }).call(this);
        rest = this.expressions.slice(preludeExps.length);
        this.expressions = preludeExps;
        if (preludeExps.length) {
          prelude = this.compileNode(merge(o, {
            indent: ''
          }));
          prelude.push(this.makeCode("\n"));
        }
        this.expressions = rest;
      }
      fragments = this.compileWithDeclarations(o);
      if (o.bare) {
        return fragments;
      }
      return [].concat(prelude, this.makeCode("(function() {\n"), fragments, this.makeCode("\n}).call(this);\n"));
    };

    Block.prototype.compileWithDeclarations = function(o) {
      var assigns, declars, exp, fragments, i, post, rest, scope, spaced, _i, _len, _ref2, _ref3, _ref4;
      fragments = [];
      post = [];
      _ref2 = this.expressions;
      for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
        exp = _ref2[i];
        exp = exp.unwrap();
        if (!(exp instanceof Comment || exp instanceof Literal)) {
          break;
        }
      }
      o = merge(o, {
        level: LEVEL_TOP
      });
      if (i) {
        rest = this.expressions.splice(i, 9e9);
        _ref3 = [this.spaced, false], spaced = _ref3[0], this.spaced = _ref3[1];
        _ref4 = [this.compileNode(o), spaced], fragments = _ref4[0], this.spaced = _ref4[1];
        this.expressions = rest;
      }
      post = this.compileNode(o);
      scope = o.scope;
      if (scope.expressions === this) {
        declars = o.scope.hasDeclarations();
        assigns = scope.hasAssignments;
        if (declars || assigns) {
          if (i) {
            fragments.push(this.makeCode('\n'));
          }
          fragments.push(this.makeCode("" + this.tab + "var "));
          if (declars) {
            fragments.push(this.makeCode(scope.declaredVariables().join(', ')));
          }
          if (assigns) {
            if (declars) {
              fragments.push(this.makeCode(",\n" + (this.tab + TAB)));
            }
            fragments.push(this.makeCode(scope.assignedVariables().join(",\n" + (this.tab + TAB))));
          }
          fragments.push(this.makeCode(";\n" + (this.spaced ? '\n' : '')));
        } else if (fragments.length && post.length) {
          fragments.push(this.makeCode("\n"));
        }
      }
      return fragments.concat(post);
    };

    Block.wrap = function(nodes) {
      if (nodes.length === 1 && nodes[0] instanceof Block) {
        return nodes[0];
      }
      return new Block(nodes);
    };

    Block.prototype.icedThreadReturn = function(call) {
      var expr, len;
      call = call || new IcedTailCall;
      len = this.expressions.length;
      while (len--) {
        expr = this.expressions[len];
        if (expr.isStatement()) {
          break;
        }
        if (!(expr instanceof Comment) && !(expr instanceof Return)) {
          call.assignValue(expr);
          this.expressions[len] = call;
          return;
        }
      }
      return this.expressions.push(call);
    };

    Block.prototype.icedCompileCps = function(o) {
      this.icedGotCpsSplitFlag = true;
      if (this.expressions.length > 1) {
        return Block.__super__.icedCompileCps.call(this, o);
      } else {
        return this.compileNode(o);
      }
    };

    Block.prototype.icedCpsRotate = function() {
      var child, e, i, pivot, rest, _i, _j, _len, _len1, _ref2;
      pivot = null;
      _ref2 = this.expressions;
      for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
        e = _ref2[i];
        if (e.icedIsCpsPivot()) {
          pivot = e;
          pivot.icedCallContinuation();
        }
        e.icedCpsRotate();
        if (pivot) {
          break;
        }
      }
      if (!pivot) {
        return this;
      }
      if (pivot.icedContinuationBlock) {
        throw SyntaxError("unexpected continuation block in node");
      }
      rest = this.expressions.slice(i + 1);
      this.expressions = this.expressions.slice(0, i + 1);
      if (rest.length) {
        child = new Block(rest);
        pivot.icedNestContinuationBlock(child);
        for (_j = 0, _len1 = rest.length; _j < _len1; _j++) {
          e = rest[_j];
          if (e.icedNodeFlag) {
            child.icedNodeFlag = true;
          }
          if (e.icedLoopFlag) {
            child.icedLoopFlag = true;
          }
          if (e.icedCpsPivotFlag) {
            child.icedCpsPivotFlag = true;
          }
          if (e.icedHasAutocbFlag) {
            child.icedHasAutocbFlag = true;
          }
        }
        child.icedCpsRotate();
      }
      return this;
    };

    Block.prototype.icedAddRuntime = function(foundDefer, foundAwait) {
      var index, node;
      index = 0;
      while ((node = this.expressions[index]) && node instanceof Comment || node instanceof Value && node.isString()) {
        index++;
      }
      return this.expressions.splice(index, 0, new IcedRuntime(foundDefer, foundAwait));
    };

    Block.prototype.icedTransform = function(opts) {
      var obj;
      obj = {};
      this.icedWalkAst(null, obj);
      if (!(opts != null ? opts.repl : void 0) && (obj.foundDefer || obj.foundAwait || opts.runforce)) {
        this.icedAddRuntime(obj.foundDefer, obj.foundAwait);
      }
      if (obj.foundAwait) {
        this.icedWalkAstLoops(false);
        this.icedWalkCpsPivots();
        this.icedCpsRotate();
      }
      return this;
    };

    Block.prototype.icedGetSingle = function() {
      if (this.expressions.length === 1) {
        return this.expressions[0];
      } else {
        return null;
      }
    };

    return Block;

  })(Base);

  exports.Literal = Literal = (function(_super) {
    __extends(Literal, _super);

    function Literal(value) {
      this.value = value;
      if (this.value == null) {
        throw new Error("whoops!");
      }
      Literal.__super__.constructor.call(this);
    }

    Literal.prototype.makeReturn = function() {
      if (this.isStatement()) {
        return this;
      } else {
        return Literal.__super__.makeReturn.apply(this, arguments);
      }
    };

    Literal.prototype.isAssignable = function() {
      return IDENTIFIER.test(this.value);
    };

    Literal.prototype.isStatement = function() {
      var _ref2;
      return (_ref2 = this.value) === 'break' || _ref2 === 'continue' || _ref2 === 'debugger';
    };

    Literal.prototype.isComplex = NO;

    Literal.prototype.assigns = function(name) {
      return name === this.value;
    };

    Literal.prototype.jumps = function(o) {
      if (this.value === 'break' && !((o != null ? o.loop : void 0) || (o != null ? o.block : void 0))) {
        return this;
      }
      if (this.value === 'continue' && !(o != null ? o.loop : void 0)) {
        return this;
      }
    };

    Literal.prototype.compileNode = function(o) {
      var answer, code, _ref2;
      if (this.icedLoopFlag && this.icedIsJump()) {
        return this.icedCompileIced(o);
      }
      code = this.value === 'this' ? ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0) ? o.scope.method.context : this.value : this.value.reserved ? "\"" + this.value + "\"" : this.value;
      answer = this.isStatement() ? "" + this.tab + code + ";" : code;
      return [this.makeCode(answer)];
    };

    Literal.prototype.toString = function() {
      return ' "' + this.value + '"';
    };

    Literal.prototype.icedWalkAst = function(parent, o) {
      if (this.value === 'arguments' && o.foundAwaitFunc) {
        o.foundArguments = true;
        this.value = "_arguments";
      }
      return false;
    };

    Literal.prototype.icedIsJump = function() {
      var _ref2;
      return (_ref2 = this.value) === 'break' || _ref2 === 'continue';
    };

    Literal.prototype.icedCompileIced = function(o) {
      var call, d, func, l;
      d = {
        'continue': iced["const"].c_while,
        'break': iced["const"].b_while
      };
      l = d[this.value];
      func = new Value(new Literal(l));
      call = new Call(func, []);
      return call.compileNode(o);
    };

    return Literal;

  })(Base);

  exports.Undefined = (function(_super) {
    __extends(Undefined, _super);

    function Undefined() {
      return Undefined.__super__.constructor.apply(this, arguments);
    }

    Undefined.prototype.isAssignable = NO;

    Undefined.prototype.isComplex = NO;

    Undefined.prototype.compileNode = function(o) {
      return [this.makeCode(o.level >= LEVEL_ACCESS ? '(void 0)' : 'void 0')];
    };

    return Undefined;

  })(Base);

  exports.Null = (function(_super) {
    __extends(Null, _super);

    function Null() {
      return Null.__super__.constructor.apply(this, arguments);
    }

    Null.prototype.isAssignable = NO;

    Null.prototype.isComplex = NO;

    Null.prototype.compileNode = function() {
      return [this.makeCode("null")];
    };

    return Null;

  })(Base);

  exports.Bool = (function(_super) {
    __extends(Bool, _super);

    Bool.prototype.isAssignable = NO;

    Bool.prototype.isComplex = NO;

    Bool.prototype.compileNode = function() {
      return [this.makeCode(this.val)];
    };

    function Bool(val) {
      this.val = val;
    }

    return Bool;

  })(Base);

  exports.Return = Return = (function(_super) {
    __extends(Return, _super);

    function Return(expression, auto) {
      this.expression = expression;
      Return.__super__.constructor.call(this);
      this.icedHasAutocbFlag = auto;
    }

    Return.prototype.children = ['expression'];

    Return.prototype.isStatement = YES;

    Return.prototype.makeReturn = THIS;

    Return.prototype.jumps = THIS;

    Return.prototype.compileToFragments = function(o, level) {
      var expr, _ref2;
      expr = (_ref2 = this.expression) != null ? _ref2.makeReturn() : void 0;
      if (expr && !(expr instanceof Return)) {
        return expr.compileToFragments(o, level);
      } else {
        return Return.__super__.compileToFragments.call(this, o, level);
      }
    };

    Return.prototype.compileNode = function(o) {
      var answer;
      if (this.icedHasAutocbFlag) {
        return this.icedCompileIced(o);
      }
      answer = [];
      answer.push(this.makeCode(this.tab + ("return" + (this.expression ? " " : ""))));
      if (this.expression) {
        answer = answer.concat(this.expression.compileToFragments(o, LEVEL_PAREN));
      }
      answer.push(this.makeCode(";"));
      return answer;
    };

    Return.prototype.icedCompileIced = function(o) {
      var args, block, call, cb, ret;
      cb = new Value(new Literal(iced["const"].autocb));
      args = this.expression ? [this.expression] : [];
      call = new Call(cb, args);
      ret = new Literal("return");
      block = new Block([call, ret]);
      return block.compileNode(o);
    };

    return Return;

  })(Base);

  exports.Value = Value = (function(_super) {
    __extends(Value, _super);

    function Value(base, props, tag) {
      Value.__super__.constructor.call(this);
      if (!props && base instanceof Value) {
        return base;
      }
      this.base = base;
      this.properties = props || [];
      if (tag) {
        this[tag] = true;
      }
      return this;
    }

    Value.prototype.children = ['base', 'properties'];

    Value.prototype.copy = function() {
      return new Value(this.base, this.properties);
    };

    Value.prototype.add = function(props) {
      this.properties = this.properties.concat(props);
      return this;
    };

    Value.prototype.hasProperties = function() {
      return !!this.properties.length;
    };

    Value.prototype.bareLiteral = function(type) {
      return !this.properties.length && this.base instanceof type;
    };

    Value.prototype.isArray = function() {
      return this.bareLiteral(Arr);
    };

    Value.prototype.isRange = function() {
      return this.bareLiteral(Range);
    };

    Value.prototype.isComplex = function() {
      return this.hasProperties() || this.base.isComplex();
    };

    Value.prototype.isAssignable = function() {
      return this.hasProperties() || this.base.isAssignable();
    };

    Value.prototype.isSimpleNumber = function() {
      return this.bareLiteral(Literal) && SIMPLENUM.test(this.base.value);
    };

    Value.prototype.isString = function() {
      return this.bareLiteral(Literal) && IS_STRING.test(this.base.value);
    };

    Value.prototype.isRegex = function() {
      return this.bareLiteral(Literal) && IS_REGEX.test(this.base.value);
    };

    Value.prototype.isAtomic = function() {
      var node, _i, _len, _ref2;
      _ref2 = this.properties.concat(this.base);
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        node = _ref2[_i];
        if (node.soak || node instanceof Call) {
          return false;
        }
      }
      return true;
    };

    Value.prototype.isNotCallable = function() {
      return this.isSimpleNumber() || this.isString() || this.isRegex() || this.isArray() || this.isRange() || this.isSplice() || this.isObject();
    };

    Value.prototype.isStatement = function(o) {
      return !this.properties.length && this.base.isStatement(o);
    };

    Value.prototype.assigns = function(name) {
      return !this.properties.length && this.base.assigns(name);
    };

    Value.prototype.jumps = function(o) {
      return !this.properties.length && this.base.jumps(o);
    };

    Value.prototype.isObject = function(onlyGenerated) {
      if (this.properties.length) {
        return false;
      }
      return (this.base instanceof Obj) && (!onlyGenerated || this.base.generated);
    };

    Value.prototype.isSplice = function() {
      return last(this.properties) instanceof Slice;
    };

    Value.prototype.looksStatic = function(className) {
      var _ref2;
      return this.base.value === className && this.properties.length && ((_ref2 = this.properties[0].name) != null ? _ref2.value : void 0) !== 'prototype';
    };

    Value.prototype.unwrap = function() {
      if (this.properties.length) {
        return this;
      } else {
        return this.base;
      }
    };

    Value.prototype.cacheReference = function(o) {
      var base, bref, name, nref;
      name = last(this.properties);
      if (this.properties.length < 2 && !this.base.isComplex() && !(name != null ? name.isComplex() : void 0)) {
        return [this, this];
      }
      base = new Value(this.base, this.properties.slice(0, -1));
      if (base.isComplex()) {
        bref = new Literal(o.scope.freeVariable('base'));
        base = new Value(new Parens(new Assign(bref, base)));
      }
      if (!name) {
        return [base, bref];
      }
      if (name.isComplex()) {
        nref = new Literal(o.scope.freeVariable('name'));
        name = new Index(new Assign(nref, name.index));
        nref = new Index(nref);
      }
      return [base.add(name), new Value(bref || base.base, [nref || name])];
    };

    Value.prototype.compileNode = function(o) {
      var fragments, prop, props, _i, _len;
      this.base.front = this.front;
      props = this.properties;
      fragments = this.base.compileToFragments(o, (props.length ? LEVEL_ACCESS : null));
      if ((this.base instanceof Parens || props.length) && SIMPLENUM.test(fragmentsToText(fragments))) {
        fragments.push(this.makeCode('.'));
      }
      for (_i = 0, _len = props.length; _i < _len; _i++) {
        prop = props[_i];
        fragments.push.apply(fragments, prop.compileToFragments(o));
      }
      return fragments;
    };

    Value.prototype.unfoldSoak = function(o) {
      return this.unfoldedSoak != null ? this.unfoldedSoak : this.unfoldedSoak = (function(_this) {
        return function() {
          var fst, i, ifn, prop, ref, snd, _i, _len, _ref2, _ref3;
          if (ifn = _this.base.unfoldSoak(o)) {
            (_ref2 = ifn.body.properties).push.apply(_ref2, _this.properties);
            return ifn;
          }
          _ref3 = _this.properties;
          for (i = _i = 0, _len = _ref3.length; _i < _len; i = ++_i) {
            prop = _ref3[i];
            if (!prop.soak) {
              continue;
            }
            prop.soak = false;
            fst = new Value(_this.base, _this.properties.slice(0, i));
            snd = new Value(_this.base, _this.properties.slice(i));
            if (fst.isComplex()) {
              ref = new Literal(o.scope.freeVariable('ref'));
              fst = new Parens(new Assign(ref, fst));
              snd.base = ref;
            }
            return new If(new Existence(fst), snd, {
              soak: true
            });
          }
          return false;
        };
      })(this)();
    };

    Value.prototype.icedToSlot = function(i) {
      var sufffix, suffix;
      if (this.base instanceof Obj) {
        return this.base.icedToSlot(i);
      }
      sufffix = null;
      if (this.properties && this.properties.length) {
        suffix = this.properties.pop();
      }
      return new Slot(i, this, suffix);
    };

    Value.prototype.icedToSlotAccess = function() {
      if (this["this"]) {
        return this.properties[0];
      } else {
        return new Access(this);
      }
    };

    return Value;

  })(Base);

  exports.Comment = Comment = (function(_super) {
    __extends(Comment, _super);

    function Comment(comment) {
      this.comment = comment;
      Comment.__super__.constructor.call(this);
    }

    Comment.prototype.isStatement = YES;

    Comment.prototype.makeReturn = THIS;

    Comment.prototype.compileNode = function(o, level) {
      var code, comment;
      comment = this.comment.replace(/^(\s*)# /gm, "$1 * ");
      code = "/*" + (multident(comment, this.tab)) + (__indexOf.call(comment, '\n') >= 0 ? "\n" + this.tab : '') + " */";
      if ((level || o.level) === LEVEL_TOP) {
        code = o.indent + code;
      }
      return [this.makeCode("\n"), this.makeCode(code)];
    };

    return Comment;

  })(Base);

  exports.Call = Call = (function(_super) {
    __extends(Call, _super);

    function Call(variable, args, soak) {
      this.args = args != null ? args : [];
      this.soak = soak;
      Call.__super__.constructor.call(this);
      this.isNew = false;
      this.isSuper = variable === 'super';
      this.variable = this.isSuper ? null : variable;
      if (variable instanceof Value && variable.isNotCallable()) {
        variable.error("literal is not a function");
      }
    }

    Call.prototype.children = ['variable', 'args'];

    Call.prototype.newInstance = function() {
      var base, _ref2;
      base = ((_ref2 = this.variable) != null ? _ref2.base : void 0) || this.variable;
      if (base instanceof Call && !base.isNew) {
        base.newInstance();
      } else {
        this.isNew = true;
      }
      return this;
    };

    Call.prototype.superReference = function(o) {
      var accesses, method;
      method = o.scope.namedMethod();
      if (method != null ? method.klass : void 0) {
        accesses = [new Access(new Literal('__super__'))];
        if (method["static"]) {
          accesses.push(new Access(new Literal('constructor')));
        }
        accesses.push(new Access(new Literal(method.name)));
        return (new Value(new Literal(method.klass), accesses)).compile(o);
      } else if (method != null ? method.ctor : void 0) {
        return "" + method.name + ".__super__.constructor";
      } else {
        return this.error('cannot call super outside of an instance method.');
      }
    };

    Call.prototype.superThis = function(o) {
      var method;
      if (o.scope.icedgen) {
        return "_this";
      } else {
        method = o.scope.method;
        return (method && !method.klass && method.context) || "this";
      }
    };

    Call.prototype.unfoldSoak = function(o) {
      var call, ifn, left, list, rite, _i, _len, _ref2, _ref3;
      if (this.soak) {
        if (this.variable) {
          if (ifn = unfoldSoak(o, this, 'variable')) {
            return ifn;
          }
          _ref2 = new Value(this.variable).cacheReference(o), left = _ref2[0], rite = _ref2[1];
        } else {
          left = new Literal(this.superReference(o));
          rite = new Value(left);
        }
        rite = new Call(rite, this.args);
        rite.isNew = this.isNew;
        left = new Literal("typeof " + (left.compile(o)) + " === \"function\"");
        return new If(left, new Value(rite), {
          soak: true
        });
      }
      call = this;
      list = [];
      while (true) {
        if (call.variable instanceof Call) {
          list.push(call);
          call = call.variable;
          continue;
        }
        if (!(call.variable instanceof Value)) {
          break;
        }
        list.push(call);
        if (!((call = call.variable.base) instanceof Call)) {
          break;
        }
      }
      _ref3 = list.reverse();
      for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
        call = _ref3[_i];
        if (ifn) {
          if (call.variable instanceof Call) {
            call.variable = ifn;
          } else {
            call.variable.base = ifn;
          }
        }
        ifn = unfoldSoak(o, call, 'variable');
      }
      return ifn;
    };

    Call.prototype.compileNode = function(o) {
      var arg, argIndex, compiledArgs, compiledArray, fragments, preface, _i, _len, _ref2, _ref3;
      if ((_ref2 = this.variable) != null) {
        _ref2.front = this.front;
      }
      compiledArray = Splat.compileSplattedArray(o, this.args, true);
      if (compiledArray.length) {
        return this.compileSplat(o, compiledArray);
      }
      compiledArgs = [];
      _ref3 = this.args;
      for (argIndex = _i = 0, _len = _ref3.length; _i < _len; argIndex = ++_i) {
        arg = _ref3[argIndex];
        arg.icedStatementAssertion();
        if (argIndex) {
          compiledArgs.push(this.makeCode(", "));
        }
        compiledArgs.push.apply(compiledArgs, arg.compileToFragments(o, LEVEL_LIST));
      }
      fragments = [];
      if (this.isSuper) {
        preface = this.superReference(o) + (".call(" + (this.superThis(o)));
        if (compiledArgs.length) {
          preface += ", ";
        }
        fragments.push(this.makeCode(preface));
      } else {
        if (this.isNew) {
          fragments.push(this.makeCode('new '));
        }
        fragments.push.apply(fragments, this.variable.compileToFragments(o, LEVEL_ACCESS));
        fragments.push(this.makeCode("("));
      }
      fragments.push.apply(fragments, compiledArgs);
      fragments.push(this.makeCode(")"));
      return fragments;
    };

    Call.prototype.compileSplat = function(o, splatArgs) {
      var answer, base, fun, idt, name, ref;
      if (this.isSuper) {
        return [].concat(this.makeCode("" + (this.superReference(o)) + ".apply(" + (this.superThis(o)) + ", "), splatArgs, this.makeCode(")"));
      }
      if (this.isNew) {
        idt = this.tab + TAB;
        return [].concat(this.makeCode("(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args);\n" + idt + "return Object(result) === result ? result : child;\n" + this.tab + "})("), this.variable.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), splatArgs, this.makeCode(", function(){})"));
      }
      answer = [];
      base = new Value(this.variable);
      if ((name = base.properties.pop()) && base.isComplex()) {
        ref = o.scope.freeVariable('ref');
        answer = answer.concat(this.makeCode("(" + ref + " = "), base.compileToFragments(o, LEVEL_LIST), this.makeCode(")"), name.compileToFragments(o));
      } else {
        fun = base.compileToFragments(o, LEVEL_ACCESS);
        if (SIMPLENUM.test(fragmentsToText(fun))) {
          fun = this.wrapInBraces(fun);
        }
        if (name) {
          ref = fragmentsToText(fun);
          fun.push.apply(fun, name.compileToFragments(o));
        } else {
          ref = 'null';
        }
        answer = answer.concat(fun);
      }
      return answer = answer.concat(this.makeCode(".apply(" + ref + ", "), splatArgs, this.makeCode(")"));
    };

    return Call;

  })(Base);

  exports.Extends = Extends = (function(_super) {
    __extends(Extends, _super);

    function Extends(child, parent) {
      this.child = child;
      this.parent = parent;
      Extends.__super__.constructor.call(this);
    }

    Extends.prototype.children = ['child', 'parent'];

    Extends.prototype.compileToFragments = function(o) {
      return new Call(new Value(new Literal(utility('extends'))), [this.child, this.parent]).compileToFragments(o);
    };

    return Extends;

  })(Base);

  exports.Access = Access = (function(_super) {
    __extends(Access, _super);

    function Access(name, tag) {
      this.name = name;
      Access.__super__.constructor.call(this);
      this.name.asKey = true;
      this.soak = tag === 'soak';
    }

    Access.prototype.children = ['name'];

    Access.prototype.compileToFragments = function(o) {
      var name;
      name = this.name.compileToFragments(o);
      if ((IDENTIFIER.test(fragmentsToText(name))) || this.name instanceof Defer) {
        name.unshift(this.makeCode("."));
      } else {
        name.unshift(this.makeCode("["));
        name.push(this.makeCode("]"));
      }
      return name;
    };

    Access.prototype.isComplex = NO;

    return Access;

  })(Base);

  exports.Index = Index = (function(_super) {
    __extends(Index, _super);

    function Index(index) {
      this.index = index;
      Index.__super__.constructor.call(this);
    }

    Index.prototype.children = ['index'];

    Index.prototype.compileToFragments = function(o) {
      return [].concat(this.makeCode("["), this.index.compileToFragments(o, LEVEL_PAREN), this.makeCode("]"));
    };

    Index.prototype.isComplex = function() {
      return this.index.isComplex();
    };

    return Index;

  })(Base);

  exports.Range = Range = (function(_super) {
    __extends(Range, _super);

    Range.prototype.children = ['from', 'to'];

    function Range(from, to, tag) {
      this.from = from;
      this.to = to;
      Range.__super__.constructor.call(this);
      this.exclusive = tag === 'exclusive';
      this.equals = this.exclusive ? '' : '=';
    }

    Range.prototype.compileVariables = function(o) {
      var step, _ref2, _ref3, _ref4, _ref5;
      o = merge(o, {
        top: true
      });
      _ref2 = this.cacheToCodeFragments(this.from.cache(o, LEVEL_LIST)), this.fromC = _ref2[0], this.fromVar = _ref2[1];
      _ref3 = this.cacheToCodeFragments(this.to.cache(o, LEVEL_LIST)), this.toC = _ref3[0], this.toVar = _ref3[1];
      if (step = del(o, 'step')) {
        _ref4 = this.cacheToCodeFragments(step.cache(o, LEVEL_LIST)), this.step = _ref4[0], this.stepVar = _ref4[1];
      }
      _ref5 = [this.fromVar.match(NUMBER), this.toVar.match(NUMBER)], this.fromNum = _ref5[0], this.toNum = _ref5[1];
      if (this.stepVar) {
        return this.stepNum = this.stepVar.match(NUMBER);
      }
    };

    Range.prototype.compileNode = function(o) {
      var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, stepPart, to, varPart, _ref2, _ref3;
      if (!this.fromVar) {
        this.compileVariables(o);
      }
      if (!o.index) {
        return this.compileArray(o);
      }
      known = this.fromNum && this.toNum;
      idx = del(o, 'index');
      idxName = del(o, 'name');
      namedIndex = idxName && idxName !== idx;
      varPart = "" + idx + " = " + this.fromC;
      if (this.toC !== this.toVar) {
        varPart += ", " + this.toC;
      }
      if (this.step !== this.stepVar) {
        varPart += ", " + this.step;
      }
      _ref2 = ["" + idx + " <" + this.equals, "" + idx + " >" + this.equals], lt = _ref2[0], gt = _ref2[1];
      condPart = this.stepNum ? parseNum(this.stepNum[0]) > 0 ? "" + lt + " " + this.toVar : "" + gt + " " + this.toVar : known ? ((_ref3 = [parseNum(this.fromNum[0]), parseNum(this.toNum[0])], from = _ref3[0], to = _ref3[1], _ref3), from <= to ? "" + lt + " " + to : "" + gt + " " + to) : (cond = this.stepVar ? "" + this.stepVar + " > 0" : "" + this.fromVar + " <= " + this.toVar, "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar);
      stepPart = this.stepVar ? "" + idx + " += " + this.stepVar : known ? namedIndex ? from <= to ? "++" + idx : "--" + idx : from <= to ? "" + idx + "++" : "" + idx + "--" : namedIndex ? "" + cond + " ? ++" + idx + " : --" + idx : "" + cond + " ? " + idx + "++ : " + idx + "--";
      if (namedIndex) {
        varPart = "" + idxName + " = " + varPart;
      }
      if (namedIndex) {
        stepPart = "" + idxName + " = " + stepPart;
      }
      return [this.makeCode("" + varPart + "; " + condPart + "; " + stepPart)];
    };

    Range.prototype.compileArray = function(o) {
      var args, body, cond, hasArgs, i, idt, post, pre, range, result, vars, _i, _ref2, _ref3, _results;
      if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) {
        range = (function() {
          _results = [];
          for (var _i = _ref2 = +this.fromNum, _ref3 = +this.toNum; _ref2 <= _ref3 ? _i <= _ref3 : _i >= _ref3; _ref2 <= _ref3 ? _i++ : _i--){ _results.push(_i); }
          return _results;
        }).apply(this);
        if (this.exclusive) {
          range.pop();
        }
        return [this.makeCode("[" + (range.join(', ')) + "]")];
      }
      idt = this.tab + TAB;
      i = o.scope.freeVariable('i');
      result = o.scope.freeVariable('results');
      pre = "\n" + idt + result + " = [];";
      if (this.fromNum && this.toNum) {
        o.index = i;
        body = fragmentsToText(this.compileNode(o));
      } else {
        vars = ("" + i + " = " + this.fromC) + (this.toC !== this.toVar ? ", " + this.toC : '');
        cond = "" + this.fromVar + " <= " + this.toVar;
        body = "var " + vars + "; " + cond + " ? " + i + " <" + this.equals + " " + this.toVar + " : " + i + " >" + this.equals + " " + this.toVar + "; " + cond + " ? " + i + "++ : " + i + "--";
      }
      post = "{ " + result + ".push(" + i + "); }\n" + idt + "return " + result + ";\n" + o.indent;
      hasArgs = function(node) {
        return node != null ? node.contains(isLiteralArguments) : void 0;
      };
      if (hasArgs(this.from) || hasArgs(this.to)) {
        args = ', arguments';
      }
      return [this.makeCode("(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).apply(this" + (args != null ? args : '') + ")")];
    };

    return Range;

  })(Base);

  exports.Slice = Slice = (function(_super) {
    __extends(Slice, _super);

    Slice.prototype.children = ['range'];

    function Slice(range) {
      this.range = range;
      Slice.__super__.constructor.call(this);
    }

    Slice.prototype.compileNode = function(o) {
      var compiled, compiledText, from, fromCompiled, to, toStr, _ref2;
      _ref2 = this.range, to = _ref2.to, from = _ref2.from;
      fromCompiled = from && from.compileToFragments(o, LEVEL_PAREN) || [this.makeCode('0')];
      if (to) {
        compiled = to.compileToFragments(o, LEVEL_PAREN);
        compiledText = fragmentsToText(compiled);
        if (!(!this.range.exclusive && +compiledText === -1)) {
          toStr = ', ' + (this.range.exclusive ? compiledText : SIMPLENUM.test(compiledText) ? "" + (+compiledText + 1) : (compiled = to.compileToFragments(o, LEVEL_ACCESS), "+" + (fragmentsToText(compiled)) + " + 1 || 9e9"));
        }
      }
      return [this.makeCode(".slice(" + (fragmentsToText(fromCompiled)) + (toStr || '') + ")")];
    };

    return Slice;

  })(Base);

  exports.Obj = Obj = (function(_super) {
    __extends(Obj, _super);

    function Obj(props, generated) {
      this.generated = generated != null ? generated : false;
      this.objects = this.properties = props || [];
      Obj.__super__.constructor.call(this);
    }

    Obj.prototype.children = ['properties'];

    Obj.prototype.compileNode = function(o) {
      var answer, i, idt, indent, join, lastNoncom, node, prop, props, _i, _j, _len, _len1;
      props = this.properties;
      if (!props.length) {
        return [this.makeCode(this.front ? '({})' : '{}')];
      }
      if (this.generated) {
        for (_i = 0, _len = props.length; _i < _len; _i++) {
          node = props[_i];
          if (node instanceof Value) {
            node.error('cannot have an implicit value in an implicit object');
          }
        }
      }
      idt = o.indent += TAB;
      lastNoncom = this.lastNonComment(this.properties);
      answer = [];
      for (i = _j = 0, _len1 = props.length; _j < _len1; i = ++_j) {
        prop = props[i];
        join = i === props.length - 1 ? '' : prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n';
        indent = prop instanceof Comment ? '' : idt;
        if (prop instanceof Assign && prop.variable instanceof Value && prop.variable.hasProperties()) {
          prop.variable.error('Invalid object key');
        }
        if (prop instanceof Value && prop["this"]) {
          prop = new Assign(prop.properties[0].name, prop, 'object');
        }
        if (!(prop instanceof Comment)) {
          if (!(prop instanceof Assign)) {
            prop = new Assign(prop, prop, 'object');
          }
          (prop.variable.base || prop.variable).asKey = true;
        }
        if (indent) {
          answer.push(this.makeCode(indent));
        }
        answer.push.apply(answer, prop.compileToFragments(o, LEVEL_TOP));
        if (join) {
          answer.push(this.makeCode(join));
        }
      }
      answer.unshift(this.makeCode("{" + (props.length && '\n')));
      answer.push(this.makeCode("" + (props.length && '\n' + this.tab) + "}"));
      if (this.front) {
        return this.wrapInBraces(answer);
      } else {
        return answer;
      }
    };

    Obj.prototype.assigns = function(name) {
      var prop, _i, _len, _ref2;
      _ref2 = this.properties;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        prop = _ref2[_i];
        if (prop.assigns(name)) {
          return true;
        }
      }
      return false;
    };

    Obj.prototype.icedToSlot = function(i) {
      var access, prop, _i, _len, _ref2, _results;
      _ref2 = this.properties;
      _results = [];
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        prop = _ref2[_i];
        if (prop instanceof Assign) {
          _results.push((prop.value.icedToSlot(i)).addAccess(prop.variable.icedToSlotAccess()));
        } else if (prop instanceof Value) {
          access = prop.icedToSlotAccess();
          _results.push((prop.icedToSlot(i)).addAccess(access));
        } else {
          _results.push(void 0);
        }
      }
      return _results;
    };

    return Obj;

  })(Base);

  exports.Arr = Arr = (function(_super) {
    __extends(Arr, _super);

    function Arr(objs) {
      this.objects = objs || [];
      Arr.__super__.constructor.call(this);
    }

    Arr.prototype.children = ['objects'];

    Arr.prototype.compileNode = function(o) {
      var answer, compiledObjs, fragments, index, obj, _i, _len;
      if (!this.objects.length) {
        return [this.makeCode('[]')];
      }
      o.indent += TAB;
      answer = Splat.compileSplattedArray(o, this.objects);
      if (answer.length) {
        return answer;
      }
      answer = [];
      compiledObjs = (function() {
        var _i, _len, _ref2, _results;
        _ref2 = this.objects;
        _results = [];
        for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
          obj = _ref2[_i];
          _results.push(obj.compileToFragments(o, LEVEL_LIST));
        }
        return _results;
      }).call(this);
      for (index = _i = 0, _len = compiledObjs.length; _i < _len; index = ++_i) {
        fragments = compiledObjs[index];
        if (index) {
          answer.push(this.makeCode(", "));
        }
        answer.push.apply(answer, fragments);
      }
      if (fragmentsToText(answer).indexOf('\n') >= 0) {
        answer.unshift(this.makeCode("[\n" + o.indent));
        answer.push(this.makeCode("\n" + this.tab + "]"));
      } else {
        answer.unshift(this.makeCode("["));
        answer.push(this.makeCode("]"));
      }
      return answer;
    };

    Arr.prototype.assigns = function(name) {
      var obj, _i, _len, _ref2;
      _ref2 = this.objects;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        obj = _ref2[_i];
        if (obj.assigns(name)) {
          return true;
        }
      }
      return false;
    };

    return Arr;

  })(Base);

  exports.Class = Class = (function(_super) {
    __extends(Class, _super);

    function Class(variable, parent, body) {
      this.variable = variable;
      this.parent = parent;
      this.body = body != null ? body : new Block;
      Class.__super__.constructor.call(this);
      this.boundFuncs = [];
      this.body.classBody = true;
    }

    Class.prototype.children = ['variable', 'parent', 'body'];

    Class.prototype.determineName = function() {
      var decl, tail;
      if (!this.variable) {
        return null;
      }
      decl = (tail = last(this.variable.properties)) ? tail instanceof Access && tail.name.value : this.variable.base.value;
      if (__indexOf.call(STRICT_PROSCRIBED, decl) >= 0) {
        this.variable.error("class variable name may not be " + decl);
      }
      return decl && (decl = IDENTIFIER.test(decl) && decl);
    };

    Class.prototype.setContext = function(name) {
      return this.body.traverseChildren(false, function(node) {
        if (node.classBody) {
          return false;
        }
        if (node instanceof Literal && node.value === 'this') {
          return node.value = name;
        } else if (node instanceof Code) {
          node.klass = name;
          if (node.bound) {
            return node.context = name;
          }
        }
      });
    };

    Class.prototype.addBoundFunctions = function(o) {
      var bvar, lhs, _i, _len, _ref2;
      _ref2 = this.boundFuncs;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        bvar = _ref2[_i];
        lhs = (new Value(new Literal("this"), [new Access(bvar)])).compile(o);
        this.ctor.body.unshift(new Literal("" + lhs + " = " + (utility('bind')) + "(" + lhs + ", this)"));
      }
    };

    Class.prototype.addProperties = function(node, name, o) {
      var assign, base, exprs, func, props;
      props = node.base.properties.slice(0);
      exprs = (function() {
        var _results;
        _results = [];
        while (assign = props.shift()) {
          if (assign instanceof Assign) {
            base = assign.variable.base;
            delete assign.context;
            func = assign.value;
            if (base.value === 'constructor') {
              if (this.ctor) {
                assign.error('cannot define more than one constructor in a class');
              }
              if (func.bound) {
                assign.error('cannot define a constructor as a bound function');
              }
              if (func instanceof Code) {
                assign = this.ctor = func;
              } else {
                this.externalCtor = o.classScope.freeVariable('class');
                assign = new Assign(new Literal(this.externalCtor), func);
              }
            } else {
              if (assign.variable["this"]) {
                func["static"] = true;
              } else {
                assign.variable = new Value(new Literal(name), [new Access(new Literal('prototype')), new Access(base)]);
                if (func instanceof Code && func.bound) {
                  this.boundFuncs.push(base);
                  func.bound = false;
                }
              }
            }
          }
          _results.push(assign);
        }
        return _results;
      }).call(this);
      return compact(exprs);
    };

    Class.prototype.walkBody = function(name, o) {
      return this.traverseChildren(false, (function(_this) {
        return function(child) {
          var cont, exps, i, node, _i, _len, _ref2;
          cont = true;
          if (child instanceof Class) {
            return false;
          }
          if (child instanceof Block) {
            _ref2 = exps = child.expressions;
            for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
              node = _ref2[i];
              if (node instanceof Assign && node.variable.looksStatic(name)) {
                node.value["static"] = true;
              } else if (node instanceof Value && node.isObject(true)) {
                cont = false;
                exps[i] = _this.addProperties(node, name, o);
              }
            }
            child.expressions = exps = flatten(exps);
          }
          return cont && !(child instanceof Class);
        };
      })(this));
    };

    Class.prototype.hoistDirectivePrologue = function() {
      var expressions, index, node;
      index = 0;
      expressions = this.body.expressions;
      while ((node = expressions[index]) && node instanceof Comment || node instanceof Value && node.isString()) {
        ++index;
      }
      return this.directives = expressions.splice(0, index);
    };

    Class.prototype.ensureConstructor = function(name) {
      if (!this.ctor) {
        this.ctor = new Code;
        if (this.externalCtor) {
          this.ctor.body.push(new Literal("" + this.externalCtor + ".apply(this, arguments)"));
        } else if (this.parent) {
          this.ctor.body.push(new Literal("" + name + ".__super__.constructor.apply(this, arguments)"));
        }
        this.ctor.body.makeReturn();
        this.body.expressions.unshift(this.ctor);
      }
      this.ctor.ctor = this.ctor.name = name;
      this.ctor.klass = null;
      return this.ctor.noReturn = true;
    };

    Class.prototype.compileNode = function(o) {
      var args, argumentsNode, func, jumpNode, klass, lname, name, superClass, _ref2;
      if (jumpNode = this.body.jumps()) {
        jumpNode.error('Class bodies cannot contain pure statements');
      }
      if (argumentsNode = this.body.contains(isLiteralArguments)) {
        argumentsNode.error("Class bodies shouldn't reference arguments");
      }
      name = this.determineName() || '_Class';
      if (name.reserved) {
        name = "_" + name;
      }
      lname = new Literal(name);
      func = new Code([], Block.wrap([this.body]));
      args = [];
      o.classScope = func.makeScope(o.scope);
      this.hoistDirectivePrologue();
      this.setContext(name);
      this.walkBody(name, o);
      this.ensureConstructor(name);
      this.addBoundFunctions(o);
      this.body.spaced = true;
      this.body.expressions.push(lname);
      if (this.parent) {
        superClass = new Literal(o.classScope.freeVariable('super', false));
        this.body.expressions.unshift(new Extends(lname, superClass));
        func.params.push(new Param(superClass));
        args.push(this.parent);
      }
      (_ref2 = this.body.expressions).unshift.apply(_ref2, this.directives);
      klass = new Parens(new Call(func, args));
      if (this.variable) {
        klass = new Assign(this.variable, klass);
      }
      return klass.compileToFragments(o);
    };

    return Class;

  })(Base);

  exports.Assign = Assign = (function(_super) {
    __extends(Assign, _super);

    function Assign(variable, value, context, options) {
      var forbidden, name, _ref2;
      this.variable = variable;
      this.value = value;
      this.context = context;
      Assign.__super__.constructor.call(this);
      this.param = options && options.param;
      this.subpattern = options && options.subpattern;
      forbidden = (_ref2 = (name = this.variable.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0);
      if (forbidden && this.context !== 'object') {
        this.variable.error("variable name may not be \"" + name + "\"");
      }
      this.icedlocal = options && options.icedlocal;
    }

    Assign.prototype.children = ['variable', 'value'];

    Assign.prototype.isStatement = function(o) {
      return (o != null ? o.level : void 0) === LEVEL_TOP && (this.context != null) && __indexOf.call(this.context, "?") >= 0;
    };

    Assign.prototype.assigns = function(name) {
      return this[this.context === 'object' ? 'value' : 'variable'].assigns(name);
    };

    Assign.prototype.unfoldSoak = function(o) {
      return unfoldSoak(o, this, 'variable');
    };

    Assign.prototype.compileNode = function(o) {
      var answer, compiledName, isValue, match, name, val, varBase, _ref2, _ref3, _ref4, _ref5;
      this.value.icedStatementAssertion();
      if (isValue = this.variable instanceof Value) {
        if (this.variable.isArray() || this.variable.isObject()) {
          return this.compilePatternMatch(o);
        }
        if (this.variable.isSplice()) {
          return this.compileSplice(o);
        }
        if ((_ref2 = this.context) === '||=' || _ref2 === '&&=' || _ref2 === '?=') {
          return this.compileConditional(o);
        }
        if ((_ref3 = this.context) === '**=' || _ref3 === '//=' || _ref3 === '%%=') {
          return this.compileSpecialMath(o);
        }
      }
      compiledName = this.variable.compileToFragments(o, LEVEL_LIST);
      name = fragmentsToText(compiledName);
      if (!this.context) {
        varBase = this.variable.unwrapAll();
        if (!varBase.isAssignable()) {
          this.variable.error("\"" + (this.variable.compile(o)) + "\" cannot be assigned");
        }
        if (!(typeof varBase.hasProperties === "function" ? varBase.hasProperties() : void 0)) {
          if (this.param || this.icedlocal) {
            o.scope.add(name, 'var', this.icedlocal);
          } else {
            o.scope.find(name);
          }
        }
      }
      if (this.value instanceof Code && (match = METHOD_DEF.exec(name))) {
        if (match[2]) {
          this.value.klass = match[1];
        }
        this.value.name = (_ref4 = (_ref5 = match[3]) != null ? _ref5 : match[4]) != null ? _ref4 : match[5];
      }
      val = this.value.compileToFragments(o, LEVEL_LIST);
      if (this.context === 'object') {
        return compiledName.concat(this.makeCode(": "), val);
      }
      answer = compiledName.concat(this.makeCode(" " + (this.context || '=') + " "), val);
      if (o.level <= LEVEL_LIST) {
        return answer;
      } else {
        return this.wrapInBraces(answer);
      }
    };

    Assign.prototype.compilePatternMatch = function(o) {
      var acc, assigns, code, expandedIdx, fragments, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, top, val, value, vvar, vvarText, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
      top = o.level === LEVEL_TOP;
      value = this.value;
      objects = this.variable.base.objects;
      if (!(olen = objects.length)) {
        code = value.compileToFragments(o);
        if (o.level >= LEVEL_OP) {
          return this.wrapInBraces(code);
        } else {
          return code;
        }
      }
      isObject = this.variable.isObject();
      if (top && olen === 1 && !((obj = objects[0]) instanceof Splat)) {
        if (obj instanceof Assign) {
          _ref2 = obj, (_ref3 = _ref2.variable, idx = _ref3.base), obj = _ref2.value;
        } else {
          idx = isObject ? obj["this"] ? obj.properties[0].name : obj : new Literal(0);
        }
        acc = IDENTIFIER.test(idx.unwrap().value || 0);
        value = new Value(value);
        value.properties.push(new (acc ? Access : Index)(idx));
        if (_ref4 = obj.unwrap().value, __indexOf.call(RESERVED, _ref4) >= 0) {
          obj.error("assignment to a reserved word: " + (obj.compile(o)));
        }
        return new Assign(obj, value, null, {
          param: this.param
        }).compileToFragments(o, LEVEL_TOP);
      }
      vvar = value.compileToFragments(o, LEVEL_LIST);
      vvarText = fragmentsToText(vvar);
      assigns = [];
      expandedIdx = false;
      if (!IDENTIFIER.test(vvarText) || this.variable.assigns(vvarText)) {
        assigns.push([this.makeCode("" + (ref = o.scope.freeVariable('ref')) + " = ")].concat(__slice.call(vvar)));
        vvar = [this.makeCode(ref)];
        vvarText = ref;
      }
      for (i = _i = 0, _len = objects.length; _i < _len; i = ++_i) {
        obj = objects[i];
        idx = i;
        if (isObject) {
          if (obj instanceof Assign) {
            _ref5 = obj, (_ref6 = _ref5.variable, idx = _ref6.base), obj = _ref5.value;
          } else {
            if (obj.base instanceof Parens) {
              _ref7 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref7[0], idx = _ref7[1];
            } else {
              idx = obj["this"] ? obj.properties[0].name : obj;
            }
          }
        }
        if (!expandedIdx && obj instanceof Splat) {
          name = obj.name.unwrap().value;
          obj = obj.unwrap();
          val = "" + olen + " <= " + vvarText + ".length ? " + (utility('slice')) + ".call(" + vvarText + ", " + i;
          if (rest = olen - i - 1) {
            ivar = o.scope.freeVariable('i');
            val += ", " + ivar + " = " + vvarText + ".length - " + rest + ") : (" + ivar + " = " + i + ", [])";
          } else {
            val += ") : []";
          }
          val = new Literal(val);
          expandedIdx = "" + ivar + "++";
        } else if (!expandedIdx && obj instanceof Expansion) {
          if (rest = olen - i - 1) {
            if (rest === 1) {
              expandedIdx = "" + vvarText + ".length - 1";
            } else {
              ivar = o.scope.freeVariable('i');
              val = new Literal("" + ivar + " = " + vvarText + ".length - " + rest);
              expandedIdx = "" + ivar + "++";
              assigns.push(val.compileToFragments(o, LEVEL_LIST));
            }
          }
          continue;
        } else {
          name = obj.unwrap().value;
          if (obj instanceof Splat || obj instanceof Expansion) {
            obj.error("multiple splats/expansions are disallowed in an assignment");
          }
          if (typeof idx === 'number') {
            idx = new Literal(expandedIdx || idx);
            acc = false;
          } else {
            acc = isObject && IDENTIFIER.test(idx.unwrap().value || 0);
          }
          val = new Value(new Literal(vvarText), [new (acc ? Access : Index)(idx)]);
        }
        if ((name != null) && __indexOf.call(RESERVED, name) >= 0) {
          obj.error("assignment to a reserved word: " + (obj.compile(o)));
        }
        assigns.push(new Assign(obj, val, null, {
          param: this.param,
          subpattern: true
        }).compileToFragments(o, LEVEL_LIST));
      }
      if (!(top || this.subpattern)) {
        assigns.push(vvar);
      }
      fragments = this.joinFragmentArrays(assigns, ', ');
      if (o.level < LEVEL_LIST) {
        return fragments;
      } else {
        return this.wrapInBraces(fragments);
      }
    };

    Assign.prototype.compileConditional = function(o) {
      var fragments, left, right, _ref2;
      _ref2 = this.variable.cacheReference(o), left = _ref2[0], right = _ref2[1];
      if (!left.properties.length && left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) {
        this.variable.error("the variable \"" + left.base.value + "\" can't be assigned with " + this.context + " because it has not been declared before");
      }
      if (__indexOf.call(this.context, "?") >= 0) {
        o.isExistentialEquals = true;
        return new If(new Existence(left), right, {
          type: 'if'
        }).addElse(new Assign(right, this.value, '=')).compileToFragments(o);
      } else {
        fragments = new Op(this.context.slice(0, -1), left, new Assign(right, this.value, '=')).compileToFragments(o);
        if (o.level <= LEVEL_LIST) {
          return fragments;
        } else {
          return this.wrapInBraces(fragments);
        }
      }
    };

    Assign.prototype.compileSpecialMath = function(o) {
      var left, right, _ref2;
      _ref2 = this.variable.cacheReference(o), left = _ref2[0], right = _ref2[1];
      return new Assign(left, new Op(this.context.slice(0, -1), right, this.value)).compileToFragments(o);
    };

    Assign.prototype.compileSplice = function(o) {
      var answer, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref2, _ref3, _ref4;
      _ref2 = this.variable.properties.pop().range, from = _ref2.from, to = _ref2.to, exclusive = _ref2.exclusive;
      name = this.variable.compile(o);
      if (from) {
        _ref3 = this.cacheToCodeFragments(from.cache(o, LEVEL_OP)), fromDecl = _ref3[0], fromRef = _ref3[1];
      } else {
        fromDecl = fromRef = '0';
      }
      if (to) {
        if (from instanceof Value && from.isSimpleNumber() && to instanceof Value && to.isSimpleNumber()) {
          to = to.compile(o) - fromRef;
          if (!exclusive) {
            to += 1;
          }
        } else {
          to = to.compile(o, LEVEL_ACCESS) + ' - ' + fromRef;
          if (!exclusive) {
            to += ' + 1';
          }
        }
      } else {
        to = "9e9";
      }
      _ref4 = this.value.cache(o, LEVEL_LIST), valDef = _ref4[0], valRef = _ref4[1];
      answer = [].concat(this.makeCode("[].splice.apply(" + name + ", [" + fromDecl + ", " + to + "].concat("), valDef, this.makeCode(")), "), valRef);
      if (o.level > LEVEL_TOP) {
        return this.wrapInBraces(answer);
      } else {
        return answer;
      }
    };

    return Assign;

  })(Base);

  exports.Code = Code = (function(_super) {
    __extends(Code, _super);

    function Code(params, body, tag) {
      Code.__super__.constructor.call(this);
      this.params = params || [];
      this.body = body || new Block;
      this.icedgen = tag === 'icedgen';
      this.icedPassedDeferral = null;
      this.bound = tag === 'boundfunc' || this.icedgen;
      this.isGenerator = this.body.contains(function(node) {
        var _ref2;
        return node instanceof Op && ((_ref2 = node.operator) === 'yield' || _ref2 === 'yield*');
      });
    }

    Code.prototype.children = ['params', 'body'];

    Code.prototype.isStatement = function() {
      return !!this.ctor;
    };

    Code.prototype.jumps = NO;

    Code.prototype.makeScope = function(parentScope) {
      return new Scope(parentScope, this.body, this);
    };

    Code.prototype.compileNode = function(o) {
      var answer, boundfunc, code, exprs, i, lit, p, param, params, ref, splats, uniqs, val, wasEmpty, wrapper, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _m, _n, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
      if (this.bound && ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0)) {
        this.context = o.scope.method.context;
      }
      if (this.bound && !this.context) {
        this.context = '_this';
        wrapper = new Code([new Param(new Literal(this.context))], new Block([this]));
        boundfunc = new Call(wrapper, [new Literal('this')]);
        boundfunc.updateLocationDataIfMissing(this.locationData);
        return boundfunc.compileNode(o);
      }
      o.scope = del(o, 'classScope') || this.makeScope(o.scope);
      o.scope.shared = del(o, 'sharedScope') || this.icedgen;
      o.scope.icedgen = this.icedgen;
      o.indent += TAB;
      delete o.bare;
      delete o.isExistentialEquals;
      params = [];
      exprs = [];
      _ref3 = this.params;
      for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
        param = _ref3[_i];
        if (!(param instanceof Expansion)) {
          o.scope.parameter(param.asReference(o));
        }
      }
      _ref4 = this.params;
      for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) {
        param = _ref4[_j];
        if (!(param.splat || param instanceof Expansion)) {
          continue;
        }
        _ref5 = this.params;
        for (_k = 0, _len2 = _ref5.length; _k < _len2; _k++) {
          p = _ref5[_k].name;
          if (!(!(param instanceof Expansion))) {
            continue;
          }
          if (p["this"]) {
            p = p.properties[0].name;
          }
          if (p.value) {
            o.scope.add(p.value, 'var', true);
          }
        }
        splats = new Assign(new Value(new Arr((function() {
          var _l, _len3, _ref6, _results;
          _ref6 = this.params;
          _results = [];
          for (_l = 0, _len3 = _ref6.length; _l < _len3; _l++) {
            p = _ref6[_l];
            _results.push(p.asReference(o));
          }
          return _results;
        }).call(this))), new Value(new Literal('arguments')));
        break;
      }
      _ref6 = this.params;
      for (_l = 0, _len3 = _ref6.length; _l < _len3; _l++) {
        param = _ref6[_l];
        if (param.isComplex()) {
          val = ref = param.asReference(o);
          if (param.value) {
            val = new Op('?', ref, param.value);
          }
          exprs.push(new Assign(new Value(param.name), val, '=', {
            param: true
          }));
        } else {
          ref = param;
          if (param.value) {
            lit = new Literal(ref.name.value + ' == null');
            val = new Assign(new Value(param.name), param.value, '=');
            exprs.push(new If(lit, val));
          }
        }
        if (!splats) {
          params.push(ref);
        }
      }
      wasEmpty = this.body.isEmpty();
      if (splats) {
        exprs.unshift(splats);
      }
      if (exprs.length) {
        (_ref7 = this.body.expressions).unshift.apply(_ref7, exprs);
      }
      for (i = _m = 0, _len4 = params.length; _m < _len4; i = ++_m) {
        p = params[i];
        params[i] = p.compileToFragments(o);
        o.scope.parameter(fragmentsToText(params[i]));
      }
      uniqs = [];
      this.eachParamName(function(name, node) {
        if (__indexOf.call(uniqs, name) >= 0) {
          node.error("multiple parameters named '" + name + "'");
        }
        return uniqs.push(name);
      });
      if (this.icedHasAutocbFlag) {
        wasEmpty = false;
      }
      if (!(wasEmpty || this.noReturn)) {
        this.body.makeReturn();
      }
      code = 'function';
      if (this.isGenerator) {
        code += '*';
      }
      if (this.ctor) {
        code += ' ' + this.name;
      }
      code += '(';
      answer = [this.makeCode(code)];
      for (i = _n = 0, _len5 = params.length; _n < _len5; i = ++_n) {
        p = params[i];
        if (i) {
          answer.push(this.makeCode(", "));
        }
        answer.push.apply(answer, p);
      }
      answer.push(this.makeCode(') {'));
      this.icedPatchBody(o);
      if (!this.body.isEmpty()) {
        answer = answer.concat(this.makeCode("\n"), this.body.compileWithDeclarations(o), this.makeCode("\n" + this.tab));
      }
      answer.push(this.makeCode('}'));
      if (this.ctor) {
        return [this.makeCode(this.tab)].concat(__slice.call(answer));
      }
      if (this.front || (o.level >= LEVEL_ACCESS)) {
        return this.wrapInBraces(answer);
      } else {
        return answer;
      }
    };

    Code.prototype.eachParamName = function(iterator) {
      var param, _i, _len, _ref2, _results;
      _ref2 = this.params;
      _results = [];
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        param = _ref2[_i];
        _results.push(param.eachName(iterator));
      }
      return _results;
    };

    Code.prototype.traverseChildren = function(crossScope, func) {
      if (crossScope) {
        return Code.__super__.traverseChildren.call(this, crossScope, func);
      }
    };

    Code.prototype.icedPatchBody = function(o) {
      var f, lhs, r, rhs;
      if (this.icedFoundArguments && this.icedNodeFlag) {
        o.scope.assign('_arguments', 'arguments');
      }
      if (this.icedNodeFlag && !this.icedgen) {
        this.icedPassedDeferral = o.scope.freeVariable(iced["const"].passed_deferral);
        lhs = new Value(new Literal(this.icedPassedDeferral));
        f = new Value(new Literal(iced["const"].ns));
        f.add(new Access(new Value(new Literal(iced["const"].findDeferral))));
        rhs = new Call(f, [new Value(new Literal('arguments'))]);
        this.body.unshift(new Assign(lhs, rhs));
      }
      if (this.icedNodeFlag && !this.icedgen) {
        r = this.icedHasAutocbFlag ? iced["const"].autocb : iced["const"].k_noop;
        rhs = new Value(new Literal(r));
        lhs = new Value(new Literal(iced["const"].k));
        return this.body.unshift(new Assign(lhs, rhs, null, {
          icedlocal: true
        }));
      }
    };

    Code.prototype.icedWalkAst = function(parent, o) {
      var cf_prev, fa_prev, faf_prev, fg_prev, param, _i, _len, _ref2;
      this.icedParentAwait = parent;
      fa_prev = o.foundAutocb;
      cf_prev = o.currFunc;
      fg_prev = o.foundArguments;
      faf_prev = o.foundAwaitFunc;
      o.foundAutocb = false;
      o.foundArguments = false;
      o.foundAwaitFunc = false;
      o.currFunc = this;
      _ref2 = this.params;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        param = _ref2[_i];
        if (param.name instanceof Literal && param.name.value === iced["const"].autocb) {
          o.foundAutocb = true;
          break;
        }
      }
      this.icedHasAutocbFlag = o.foundAutocb;
      Code.__super__.icedWalkAst.call(this, parent, o);
      this.icedFoundArguments = o.foundArguments;
      o.foundAwaitFunc = faf_prev;
      o.foundArguments = fg_prev;
      o.foundAutocb = fa_prev;
      o.currFunc = cf_prev;
      return false;
    };

    Code.prototype.icedWalkAstLoops = function(flood) {
      if (Code.__super__.icedWalkAstLoops.call(this, false)) {
        this.icedLoopFlag = true;
      }
      return false;
    };

    Code.prototype.icedWalkCpsPivots = function() {
      Code.__super__.icedWalkCpsPivots.call(this);
      return this.icedCpsPivotFlag = false;
    };

    Code.prototype.icedTraceName = function() {
      var parts;
      parts = [];
      if (this.klass) {
        parts.push(this.klass);
      }
      if (this.name) {
        parts.push(this.name);
      }
      return parts.join('.');
    };

    return Code;

  })(Base);

  exports.Param = Param = (function(_super) {
    __extends(Param, _super);

    function Param(name, value, splat) {
      var _ref2;
      this.name = name;
      this.value = value;
      this.splat = splat;
      Param.__super__.constructor.call(this);
      if (_ref2 = (name = this.name.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) {
        this.name.error("parameter name \"" + name + "\" is not allowed");
      }
    }

    Param.prototype.children = ['name', 'value'];

    Param.prototype.compileToFragments = function(o) {
      return this.name.compileToFragments(o, LEVEL_LIST);
    };

    Param.prototype.asReference = function(o) {
      var node;
      if (this.reference) {
        return this.reference;
      }
      node = this.name;
      if (node["this"]) {
        node = node.properties[0].name;
        if (node.value.reserved) {
          node = new Literal(o.scope.freeVariable(node.value));
        }
      } else if (node.isComplex()) {
        node = new Literal(o.scope.freeVariable('arg'));
      }
      node = new Value(node);
      if (this.splat) {
        node = new Splat(node);
      }
      node.updateLocationDataIfMissing(this.locationData);
      return this.reference = node;
    };

    Param.prototype.isComplex = function() {
      return this.name.isComplex();
    };

    Param.prototype.eachName = function(iterator, name) {
      var atParam, node, obj, _i, _len, _ref2;
      if (name == null) {
        name = this.name;
      }
      atParam = function(obj) {
        var node;
        node = obj.properties[0].name;
        if (!node.value.reserved) {
          return iterator(node.value, node);
        }
      };
      if (name instanceof Literal) {
        return iterator(name.value, name);
      }
      if (name instanceof Value) {
        return atParam(name);
      }
      _ref2 = name.objects;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        obj = _ref2[_i];
        if (obj instanceof Assign) {
          this.eachName(iterator, obj.value.unwrap());
        } else if (obj instanceof Splat) {
          node = obj.name.unwrap();
          iterator(node.value, node);
        } else if (obj instanceof Value) {
          if (obj.isArray() || obj.isObject()) {
            this.eachName(iterator, obj.base);
          } else if (obj["this"]) {
            atParam(obj);
          } else {
            iterator(obj.base.value, obj.base);
          }
        } else if (!(obj instanceof Expansion)) {
          obj.error("illegal parameter " + (obj.compile()));
        }
      }
    };

    return Param;

  })(Base);

  exports.Splat = Splat = (function(_super) {
    __extends(Splat, _super);

    Splat.prototype.children = ['name'];

    Splat.prototype.isAssignable = YES;

    function Splat(name) {
      Splat.__super__.constructor.call(this);
      this.name = name.compile ? name : new Literal(name);
    }

    Splat.prototype.assigns = function(name) {
      return this.name.assigns(name);
    };

    Splat.prototype.compileToFragments = function(o) {
      return this.name.compileToFragments(o);
    };

    Splat.prototype.unwrap = function() {
      return this.name;
    };

    Splat.compileSplattedArray = function(o, list, apply) {
      var args, base, compiledNode, concatPart, fragments, i, index, node, _i, _len;
      index = -1;
      while ((node = list[++index]) && !(node instanceof Splat)) {
        continue;
      }
      if (index >= list.length) {
        return [];
      }
      if (list.length === 1) {
        node = list[0];
        fragments = node.compileToFragments(o, LEVEL_LIST);
        if (apply) {
          return fragments;
        }
        return [].concat(node.makeCode("" + (utility('slice')) + ".call("), fragments, node.makeCode(")"));
      }
      args = list.slice(index);
      for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
        node = args[i];
        compiledNode = node.compileToFragments(o, LEVEL_LIST);
        args[i] = node instanceof Splat ? [].concat(node.makeCode("" + (utility('slice')) + ".call("), compiledNode, node.makeCode(")")) : [].concat(node.makeCode("["), compiledNode, node.makeCode("]"));
      }
      if (index === 0) {
        node = list[0];
        concatPart = node.joinFragmentArrays(args.slice(1), ', ');
        return args[0].concat(node.makeCode(".concat("), concatPart, node.makeCode(")"));
      }
      base = (function() {
        var _j, _len1, _ref2, _results;
        _ref2 = list.slice(0, index);
        _results = [];
        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
          node = _ref2[_j];
          _results.push(node.compileToFragments(o, LEVEL_LIST));
        }
        return _results;
      })();
      base = list[0].joinFragmentArrays(base, ', ');
      concatPart = list[index].joinFragmentArrays(args, ', ');
      return [].concat(list[0].makeCode("["), base, list[index].makeCode("].concat("), concatPart, (last(list)).makeCode(")"));
    };

    Splat.prototype.icedToSlot = function(i) {
      return new Slot(i, new Value(this.name), null, true);
    };

    return Splat;

  })(Base);

  exports.Expansion = Expansion = (function(_super) {
    __extends(Expansion, _super);

    function Expansion() {
      return Expansion.__super__.constructor.apply(this, arguments);
    }

    Expansion.prototype.isComplex = NO;

    Expansion.prototype.compileNode = function(o) {
      return this.error('Expansion must be used inside a destructuring assignment or parameter list');
    };

    Expansion.prototype.asReference = function(o) {
      return this;
    };

    Expansion.prototype.eachName = function(iterator) {};

    return Expansion;

  })(Base);

  exports.While = While = (function(_super) {
    __extends(While, _super);

    function While(condition, options) {
      this.condition = (options != null ? options.invert : void 0) ? condition.invert() : condition;
      this.guard = options != null ? options.guard : void 0;
    }

    While.prototype.children = ['condition', 'guard', 'body'];

    While.prototype.isStatement = YES;

    While.prototype.isLoop = YES;

    While.prototype.makeReturn = function(res) {
      if (res) {
        return While.__super__.makeReturn.apply(this, arguments);
      } else {
        this.returns = !this.jumps({
          loop: true
        });
        return this;
      }
    };

    While.prototype.addBody = function(body) {
      this.body = body;
      return this;
    };

    While.prototype.jumps = function() {
      var expressions, jumpNode, node, _i, _len;
      expressions = this.body.expressions;
      if (!expressions.length) {
        return false;
      }
      for (_i = 0, _len = expressions.length; _i < _len; _i++) {
        node = expressions[_i];
        if (jumpNode = node.jumps({
          loop: true
        })) {
          return jumpNode;
        }
      }
      return false;
    };

    While.prototype.compileNode = function(o) {
      var answer, body, rvar, set;
      this.condition.icedStatementAssertion();
      if (this.icedNodeFlag) {
        return this.icedCompileIced(o);
      }
      o.indent += TAB;
      set = '';
      body = this.body;
      if (body.isEmpty()) {
        body = this.makeCode('');
      } else {
        if (this.returns) {
          body.makeReturn(rvar = o.scope.freeVariable('results'));
          set = "" + this.tab + rvar + " = [];\n";
        }
        if (this.guard) {
          if (body.expressions.length > 1) {
            body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue")));
          } else {
            if (this.guard) {
              body = Block.wrap([new If(this.guard, body)]);
            }
          }
        }
        body = [].concat(this.makeCode("\n"), body.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab));
      }
      answer = [].concat(this.makeCode(set + this.tab + "while ("), this.condition.compileToFragments(o, LEVEL_PAREN), this.makeCode(") {"), body, this.makeCode("}"));
      if (this.returns) {
        if (this.icedHasAutocbFlag) {
          answer.push(this.makeCode("\n" + this.tab + iced["const"].autocb + "(" + rvar + ");"));
          answer.push(this.makeCode("\n" + this.tab + "return;"));
        } else {
          answer.push(this.makeCode("\n" + this.tab + "return " + rvar + ";"));
        }
      }
      return answer;
    };

    While.prototype.icedWrap = function(d) {
      var body, break_assign, break_block, break_body, break_expr, break_id, call1, call2, cond, condition, continue_assign, continue_block, continue_block_inner, continue_body, continue_fn, continue_id, f, guard_if, k_id, k_param, next_arg, next_assign, next_block, next_body, next_id, outStatements, rvar, rvar_init, rvar_value, top_assign, top_block, top_body, top_call, top_func, top_id, top_statements, tramp;
      condition = d.condition;
      body = d.body;
      rvar = d.rvar;
      outStatements = [];
      if (rvar) {
        rvar_value = new Value(new Literal(rvar));
      }
      top_id = new Value(new Literal(iced["const"].t_while));
      k_id = new Value(new Literal(iced["const"].k));
      k_param = new Param(new Literal(iced["const"].k));
      break_id = new Value(new Literal(iced["const"].b_while));
      if (rvar) {
        break_expr = new Call(k_id, [rvar_value]);
        break_block = new Block([break_expr]);
        break_body = new Code([], break_block, 'icedgen');
        break_assign = new Assign(break_id, break_body, null, {
          icedlocal: true
        });
      } else {
        break_assign = new Assign(break_id, k_id, null, {
          icedlocal: true
        });
      }
      continue_id = new Value(new Literal(iced["const"].c_while));
      continue_block_inner = new Block([new Call(top_id, [k_id])]);
      if (d.step) {
        continue_block_inner.unshift(d.step);
      }
      continue_fn = new Code([], continue_block_inner);
      tramp = new Value(new Literal(iced["const"].ns));
      tramp.add(new Access(new Value(new Literal(iced["const"].trampoline))));
      continue_block = new Block([new Call(tramp, [continue_fn])]);
      continue_body = new Code([], continue_block, 'icedgen');
      continue_assign = new Assign(continue_id, continue_body, null, {
        icedlocal: true
      });
      next_id = new Value(new Literal(iced["const"].n_while));
      if (rvar) {
        next_arg = new Param(new Literal(iced["const"].n_arg));
        f = rvar_value.copy();
        f.add(new Access(new Value(new Literal('push'))));
        call1 = new Call(f, [next_arg]);
        call2 = new Call(continue_id, []);
        next_block = new Block([call1, call2]);
        next_body = new Code([next_arg], next_block, 'icedgen');
        next_assign = new Assign(next_id, next_body, null, {
          icedlocal: true
        });
      } else {
        next_assign = new Assign(next_id, continue_id);
      }
      cond = new If(condition.invert(), new Block([new Call(break_id, [])]));
      if (d.guard) {
        continue_block = new Block([new Call(continue_id, [])]);
        guard_if = new If(d.guard, body);
        guard_if.addElse(continue_block);
        cond.addElse(new Block([d.pre_body, guard_if]));
      } else {
        cond.addElse(new Block([d.pre_body, body]));
      }
      top_body = new Block([break_assign, continue_assign, next_assign, cond]);
      top_func = new Code([k_param], top_body, 'icedgen');
      top_assign = new Assign(top_id, top_func, null, {
        icedlocal: true
      });
      top_call = new Call(top_id, [k_id]);
      top_statements = [];
      if (d.init) {
        top_statements = top_statements.concat(d.init);
      }
      if (rvar) {
        rvar_init = new Assign(rvar_value, new Arr);
        top_statements.push(rvar_init);
      }
      top_statements = top_statements.concat([top_assign, top_call]);
      return top_block = new Block(top_statements);
    };

    While.prototype.icedCallContinuation = function() {
      return this.body.icedThreadReturn(new IcedTailCall(iced["const"].n_while));
    };

    While.prototype.icedCompileIced = function(o) {
      var b, opts;
      opts = {
        condition: this.condition,
        body: this.body,
        guard: this.guard
      };
      if (this.returns) {
        opts.rvar = o.scope.freeVariable('results');
      }
      b = this.icedWrap(opts);
      return b.compileNode(o);
    };

    return While;

  })(Base);

  exports.Op = Op = (function(_super) {
    var CONVERSIONS, INVERSIONS;

    __extends(Op, _super);

    function Op(op, first, second, flip) {
      Op.__super__.constructor.call(this);
      if (op === 'in') {
        return new In(first, second);
      }
      if (op === 'do') {
        return this.generateDo(first);
      }
      if (op === 'new') {
        if (first instanceof Call && !first["do"] && !first.isNew) {
          return first.newInstance();
        }
        if (first instanceof Code && first.bound || first["do"]) {
          first = new Parens(first);
        }
      }
      this.operator = CONVERSIONS[op] || op;
      this.first = first;
      this.second = second;
      this.flip = !!flip;
      return this;
    }

    CONVERSIONS = {
      '==': '===',
      '!=': '!==',
      'of': 'in',
      'yieldfrom': 'yield*'
    };

    INVERSIONS = {
      '!==': '===',
      '===': '!=='
    };

    Op.prototype.children = ['first', 'second'];

    Op.prototype.isSimpleNumber = NO;

    Op.prototype.isYield = function() {
      var _ref2;
      return (_ref2 = this.operator) === 'yield' || _ref2 === 'yield*';
    };

    Op.prototype.isUnary = function() {
      return !this.second;
    };

    Op.prototype.isComplex = function() {
      var _ref2;
      return !(this.isUnary() && ((_ref2 = this.operator) === '+' || _ref2 === '-')) || this.first.isComplex();
    };

    Op.prototype.isChainable = function() {
      var _ref2;
      return (_ref2 = this.operator) === '<' || _ref2 === '>' || _ref2 === '>=' || _ref2 === '<=' || _ref2 === '===' || _ref2 === '!==';
    };

    Op.prototype.invert = function() {
      var allInvertable, curr, fst, op, _ref2;
      if (this.isChainable() && this.first.isChainable()) {
        allInvertable = true;
        curr = this;
        while (curr && curr.operator) {
          allInvertable && (allInvertable = curr.operator in INVERSIONS);
          curr = curr.first;
        }
        if (!allInvertable) {
          return new Parens(this).invert();
        }
        curr = this;
        while (curr && curr.operator) {
          curr.invert = !curr.invert;
          curr.operator = INVERSIONS[curr.operator];
          curr = curr.first;
        }
        return this;
      } else if (op = INVERSIONS[this.operator]) {
        this.operator = op;
        if (this.first.unwrap() instanceof Op) {
          this.first.invert();
        }
        return this;
      } else if (this.second) {
        return new Parens(this).invert();
      } else if (this.operator === '!' && (fst = this.first.unwrap()) instanceof Op && ((_ref2 = fst.operator) === '!' || _ref2 === 'in' || _ref2 === 'instanceof')) {
        return fst;
      } else {
        return new Op('!', this);
      }
    };

    Op.prototype.unfoldSoak = function(o) {
      var _ref2;
      return ((_ref2 = this.operator) === '++' || _ref2 === '--' || _ref2 === 'delete') && unfoldSoak(o, this, 'first');
    };

    Op.prototype.generateDo = function(exp) {
      var call, func, param, passedParams, ref, _i, _len, _ref2;
      passedParams = [];
      func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp;
      _ref2 = func.params || [];
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        param = _ref2[_i];
        if (param.value) {
          passedParams.push(param.value);
          delete param.value;
        } else {
          passedParams.push(param);
        }
      }
      call = new Call(exp, passedParams);
      call["do"] = true;
      return call;
    };

    Op.prototype.compileNode = function(o) {
      var answer, isChain, lhs, rhs, _ref2, _ref3;
      isChain = this.isChainable() && this.first.isChainable();
      if (!isChain) {
        this.first.front = this.front;
      }
      if (this.operator === 'delete' && o.scope.check(this.first.unwrapAll().value)) {
        this.error('delete operand may not be argument or var');
      }
      if (((_ref2 = this.operator) === '--' || _ref2 === '++') && (_ref3 = this.first.unwrapAll().value, __indexOf.call(STRICT_PROSCRIBED, _ref3) >= 0)) {
        this.error("cannot increment/decrement \"" + (this.first.unwrapAll().value) + "\"");
      }
      if (this.isYield()) {
        return this.compileYield(o);
      }
      if (this.isUnary()) {
        return this.compileUnary(o);
      }
      if (isChain) {
        return this.compileChain(o);
      }
      switch (this.operator) {
        case '?':
          return this.compileExistence(o);
        case '**':
          return this.compilePower(o);
        case '//':
          return this.compileFloorDivision(o);
        case '%%':
          return this.compileModulo(o);
        default:
          lhs = this.first.compileToFragments(o, LEVEL_OP);
          rhs = this.second.compileToFragments(o, LEVEL_OP);
          answer = [].concat(lhs, this.makeCode(" " + this.operator + " "), rhs);
          if (o.level <= LEVEL_OP) {
            return answer;
          } else {
            return this.wrapInBraces(answer);
          }
      }
    };

    Op.prototype.compileChain = function(o) {
      var fragments, fst, shared, _ref2;
      _ref2 = this.first.second.cache(o), this.first.second = _ref2[0], shared = _ref2[1];
      fst = this.first.compileToFragments(o, LEVEL_OP);
      fragments = fst.concat(this.makeCode(" " + (this.invert ? '&&' : '||') + " "), shared.compileToFragments(o), this.makeCode(" " + this.operator + " "), this.second.compileToFragments(o, LEVEL_OP));
      return this.wrapInBraces(fragments);
    };

    Op.prototype.compileExistence = function(o) {
      var fst, ref;
      if (this.first.isComplex()) {
        ref = new Literal(o.scope.freeVariable('ref'));
        fst = new Parens(new Assign(ref, this.first));
      } else {
        fst = this.first;
        ref = fst;
      }
      return new If(new Existence(fst), ref, {
        type: 'if'
      }).addElse(this.second).compileToFragments(o);
    };

    Op.prototype.compileUnary = function(o) {
      var op, parts, plusMinus;
      parts = [];
      op = this.operator;
      parts.push([this.makeCode(op)]);
      if (op === '!' && this.first instanceof Existence) {
        this.first.negated = !this.first.negated;
        return this.first.compileToFragments(o);
      }
      if (o.level >= LEVEL_ACCESS) {
        return (new Parens(this)).compileToFragments(o);
      }
      plusMinus = op === '+' || op === '-';
      if ((op === 'new' || op === 'typeof' || op === 'delete') || plusMinus && this.first instanceof Op && this.first.operator === op) {
        parts.push([this.makeCode(' ')]);
      }
      if ((plusMinus && this.first instanceof Op) || (op === 'new' && this.first.isStatement(o))) {
        this.first = new Parens(this.first);
      }
      parts.push(this.first.compileToFragments(o, LEVEL_OP));
      if (this.flip) {
        parts.reverse();
      }
      return this.joinFragmentArrays(parts, '');
    };

    Op.prototype.compileYield = function(o) {
      var op, parts;
      parts = [];
      op = this.operator;
      if (o.scope.parent == null) {
        this.error('yield statements must occur within a function generator.');
      }
      if (__indexOf.call(Object.keys(this.first), 'expression') >= 0) {
        if (this.first.expression != null) {
          parts.push(this.first.expression.compileToFragments(o, LEVEL_OP));
        }
      } else {
        parts.push([this.makeCode("(" + op + " ")]);
        parts.push(this.first.compileToFragments(o, LEVEL_OP));
        parts.push([this.makeCode(")")]);
      }
      return this.joinFragmentArrays(parts, '');
    };

    Op.prototype.compilePower = function(o) {
      var pow;
      pow = new Value(new Literal('Math'), [new Access(new Literal('pow'))]);
      return new Call(pow, [this.first, this.second]).compileToFragments(o);
    };

    Op.prototype.compileFloorDivision = function(o) {
      var div, floor;
      floor = new Value(new Literal('Math'), [new Access(new Literal('floor'))]);
      div = new Op('/', this.first, this.second);
      return new Call(floor, [div]).compileToFragments(o);
    };

    Op.prototype.compileModulo = function(o) {
      var mod;
      mod = new Value(new Literal(utility('modulo')));
      return new Call(mod, [this.first, this.second]).compileToFragments(o);
    };

    Op.prototype.toString = function(idt) {
      return Op.__super__.toString.call(this, idt, this.constructor.name + ' ' + this.operator);
    };

    Op.prototype.icedWrapContinuation = function() {
      return this.icedCallContinuationFlag;
    };

    return Op;

  })(Base);

  exports.In = In = (function(_super) {
    __extends(In, _super);

    function In(object, array) {
      this.object = object;
      this.array = array;
      In.__super__.constructor.call(this);
    }

    In.prototype.children = ['object', 'array'];

    In.prototype.invert = NEGATE;

    In.prototype.compileNode = function(o) {
      var hasSplat, obj, _i, _len, _ref2;
      if (this.array instanceof Value && this.array.isArray() && this.array.base.objects.length) {
        _ref2 = this.array.base.objects;
        for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
          obj = _ref2[_i];
          if (!(obj instanceof Splat)) {
            continue;
          }
          hasSplat = true;
          break;
        }
        if (!hasSplat) {
          return this.compileOrTest(o);
        }
      }
      return this.compileLoopTest(o);
    };

    In.prototype.compileOrTest = function(o) {
      var cmp, cnj, i, item, ref, sub, tests, _i, _len, _ref2, _ref3, _ref4;
      _ref2 = this.object.cache(o, LEVEL_OP), sub = _ref2[0], ref = _ref2[1];
      _ref3 = this.negated ? [' !== ', ' && '] : [' === ', ' || '], cmp = _ref3[0], cnj = _ref3[1];
      tests = [];
      _ref4 = this.array.base.objects;
      for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
        item = _ref4[i];
        if (i) {
          tests.push(this.makeCode(cnj));
        }
        tests = tests.concat((i ? ref : sub), this.makeCode(cmp), item.compileToFragments(o, LEVEL_ACCESS));
      }
      if (o.level < LEVEL_OP) {
        return tests;
      } else {
        return this.wrapInBraces(tests);
      }
    };

    In.prototype.compileLoopTest = function(o) {
      var fragments, ref, sub, _ref2;
      _ref2 = this.object.cache(o, LEVEL_LIST), sub = _ref2[0], ref = _ref2[1];
      fragments = [].concat(this.makeCode(utility('indexOf') + ".call("), this.array.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), ref, this.makeCode(") " + (this.negated ? '< 0' : '>= 0')));
      if (fragmentsToText(sub) === fragmentsToText(ref)) {
        return fragments;
      }
      fragments = sub.concat(this.makeCode(', '), fragments);
      if (o.level < LEVEL_LIST) {
        return fragments;
      } else {
        return this.wrapInBraces(fragments);
      }
    };

    In.prototype.toString = function(idt) {
      return In.__super__.toString.call(this, idt, this.constructor.name + (this.negated ? '!' : ''));
    };

    return In;

  })(Base);

  exports.Slot = Slot = (function(_super) {
    __extends(Slot, _super);

    function Slot(index, value, suffix, splat) {
      Slot.__super__.constructor.call(this);
      this.index = index;
      this.value = value;
      this.suffix = suffix;
      this.splat = splat;
      this.access = null;
    }

    Slot.prototype.addAccess = function(a) {
      this.access = a;
      return this;
    };

    Slot.prototype.children = ['value', 'suffix'];

    return Slot;

  })(Base);

  exports.Defer = Defer = (function(_super) {
    __extends(Defer, _super);

    function Defer(args, lineno) {
      var a, i;
      this.lineno = lineno;
      Defer.__super__.constructor.call(this);
      this.slots = flatten((function() {
        var _i, _len, _results;
        _results = [];
        for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
          a = args[i];
          _results.push(a.icedToSlot(i));
        }
        return _results;
      })());
      this.params = [];
      this.vars = [];
      this.custom = false;
    }

    Defer.prototype.children = ['slots'];

    Defer.prototype.setCustom = function() {
      this.custom = true;
      return this;
    };

    Defer.prototype.newParam = function() {
      var l;
      l = "" + iced["const"].slot + "_" + (this.params.length + 1);
      this.params.push(new Param(new Literal(l)));
      return new Value(new Literal(l));
    };

    Defer.prototype.makeAssignFn = function(o) {
      var a, args, assign, assignments, block, call, func, i, i_lit, inner_fn, lit, outer_block, outer_fn, prop, s, slot, _i, _len, _ref2;
      if (this.slots.length === 0) {
        return null;
      }
      assignments = [];
      args = [];
      i = 0;
      _ref2 = this.slots;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        s = _ref2[_i];
        i = s.index;
        a = new Value(new Literal("arguments"));
        i_lit = new Value(new Literal(i));
        if (s.splat) {
          func = new Value(new Literal(utility('slice')));
          func.add(new Access(new Value(new Literal('call'))));
          call = new Call(func, [a, i_lit]);
          slot = s.value;
          this.vars.push(slot);
          assign = new Assign(slot, call);
        } else {
          a.add(new Index(i_lit));
          if (s.access) {
            a.add(s.access);
          }
          if (!s.suffix) {
            lit = s.value.compile(o, LEVEL_TOP);
            if (lit === "_") {
              slot = new Value(new Literal(iced["const"].deferrals));
              slot.add(new Access(new Value(new Literal(iced["const"].retslot))));
            } else {
              slot = s.value;
              this.vars.push(slot);
            }
          } else {
            args.push(s.value);
            slot = this.newParam();
            if (s.suffix instanceof Index) {
              prop = new Index(this.newParam());
              args.push(s.suffix.index);
            } else {
              prop = s.suffix;
            }
            slot.add(prop);
          }
          assign = new Assign(slot, a);
        }
        assignments.push(assign);
      }
      block = new Block(assignments);
      inner_fn = new Code([], block, 'icedgen');
      outer_block = new Block([new Return(inner_fn)]);
      outer_fn = new Code(this.params, outer_block, 'icedgen');
      return call = new Call(outer_fn, args);
    };

    Defer.prototype.transform = function(o) {
      var assign_fn, assignments, context_assign, context_lhs, context_rhs, fn, ln_assign, ln_lhs, ln_rhs, meth;
      meth = new Value(new Literal(iced["const"].defer_method));
      if (this.custom) {
        fn = meth;
      } else {
        fn = new Value(new Literal(iced["const"].deferrals));
        fn.add(new Access(meth));
      }
      assignments = [];
      if ((assign_fn = this.makeAssignFn(o))) {
        assignments.push(new Assign(new Value(new Literal(iced["const"].assign_fn)), assign_fn, "object"));
      }
      ln_lhs = new Value(new Literal(iced["const"].lineno));
      ln_rhs = new Value(new Literal(this.lineno));
      ln_assign = new Assign(ln_lhs, ln_rhs, "object");
      assignments.push(ln_assign);
      if (this.custom) {
        context_lhs = new Value(new Literal(iced["const"].context));
        context_rhs = new Value(new Literal(iced["const"].deferrals));
        context_assign = new Assign(context_lhs, context_rhs, "object");
        assignments.push(context_assign);
      }
      o = new Obj(assignments);
      return new Call(fn, [new Value(o)]);
    };

    Defer.prototype.compileNode = function(o) {
      var call, name, scope, v, _i, _len, _ref2;
      call = this.transform(o);
      _ref2 = this.vars;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        v = _ref2[_i];
        name = v.compile(o, LEVEL_LIST);
        scope = o.scope;
        scope.add(name, 'var');
      }
      return call.compileNode(o);
    };

    Defer.prototype.icedWalkAst = function(p, o) {
      this.icedHasAutocbFlag = o.foundAutocb;
      o.foundDefer = true;
      this.parentFunc = o.currFunc;
      return Defer.__super__.icedWalkAst.call(this, p, o);
    };

    return Defer;

  })(Base);

  quote_path_for_emission = function(n) {
    return '"' + n.replace(/\\/g, '\\\\') + '"';
  };

  require_top_dir = function() {
    return quote_path_for_emission(pathmod.join(__dirname, "..", ".."));
  };

  exports.Await = Await = (function(_super) {
    __extends(Await, _super);

    function Await(body) {
      this.body = body;
      Await.__super__.constructor.call(this);
    }

    Await.prototype.transform = function(o) {
      var assign, assignments, body, call, cb_assignment, cb_lhs, cb_rhs, cls, fn_assignment, fn_lhs, fn_rhs, func_assignment, func_lhs, func_rhs, lhs, meth, n, name, rhs, trace, _ref2, _ref3;
      body = this.body;
      name = iced["const"].deferrals;
      o.scope.add(name, 'var');
      lhs = new Value(new Literal(name));
      cls = new Value(new Literal(iced["const"].ns));
      cls.add(new Access(new Value(new Literal(iced["const"].Deferrals))));
      assignments = [];
      if (n = (_ref2 = this.parentFunc) != null ? _ref2.icedPassedDeferral : void 0) {
        cb_lhs = new Value(new Literal(iced["const"].parent));
        cb_rhs = new Value(new Literal(n));
        cb_assignment = new Assign(cb_lhs, cb_rhs, "object");
        assignments.push(cb_assignment);
      }
      if (o.filename != null) {
        fn_lhs = new Value(new Literal(iced["const"].filename));
        fn_rhs = new Value(new Literal(quote_path_for_emission(o.filename)));
        fn_assignment = new Assign(fn_lhs, fn_rhs, "object");
        assignments.push(fn_assignment);
      }
      if (n = (_ref3 = this.parentFunc) != null ? _ref3.icedTraceName() : void 0) {
        func_lhs = new Value(new Literal(iced["const"].funcname));
        func_rhs = new Value(new Literal('"' + n + '"'));
        func_assignment = new Assign(func_lhs, func_rhs, "object");
        assignments.push(func_assignment);
      }
      trace = new Obj(assignments, true);
      call = new Call(cls, [new Value(new Literal(iced["const"].k)), trace]);
      rhs = new Op("new", call);
      assign = new Assign(lhs, rhs);
      body.unshift(assign);
      meth = lhs.copy().add(new Access(new Value(new Literal(iced["const"].fulfill))));
      call = new Call(meth, []);
      body.push(call);
      return this.body = body;
    };

    Await.prototype.children = ['body'];

    Await.prototype.isStatement = function() {
      return YES;
    };

    Await.prototype.makeReturn = THIS;

    Await.prototype.compileNode = function(o) {
      this.transform(o);
      return this.body.compileNode(o);
    };

    Await.prototype.icedWalkAst = function(p, o) {
      this.icedHasAutocbFlag = o.foundAutocb;
      this.parentFunc = o.currFunc;
      p = p || this;
      this.icedParentAwait = p;
      Await.__super__.icedWalkAst.call(this, p, o);
      return this.icedNodeFlag = o.foundAwaitFunc = o.foundAwait = true;
    };

    return Await;

  })(Base);

  IcedRuntime = (function(_super) {
    __extends(IcedRuntime, _super);

    function IcedRuntime(foundDefer, foundAwait) {
      this.foundDefer = foundDefer;
      this.foundAwait = foundAwait;
      IcedRuntime.__super__.constructor.call(this);
    }

    IcedRuntime.prototype.compileNode = function(o, level) {
      var access, accessname, assign, call, callv, file, inc, interp, k, klass, lhs_vec, ns, qmodname, req, rhs, v, val, window_mode, window_val, _i, _j, _len, _len1, _ref2;
      this.expressions = [];
      v = o.runtime ? o.runtime : o.bare ? "none" : this.foundDefer ? "node" : "none";
      if (o.runtime && !this.foundDefer && !o.runforce) {
        v = "none";
      }
      window_mode = false;
      window_val = null;
      inc = null;
      inc = (function() {
        switch (v) {
          case "inline":
          case "window":
            if (v === "window") {
              window_mode = true;
            }
            if (window_mode) {
              window_val = new Value(new Literal(v));
            }
            return InlineRuntime.generate(window_val ? window_val.copy() : null);
          case "node":
          case "browserify":
          case "interp":
            interp = v === "interp";
            qmodname = interp ? require_top_dir() : "'iced-runtime'";
            accessname = iced["const"].ns;
            file = new Literal(qmodname);
            access = new Access(new Literal(accessname));
            req = new Value(new Literal("require"));
            call = new Call(req, [file]);
            callv = new Value(call);
            if (interp) {
              callv.add(access);
            }
            ns = new Value(new Literal(iced["const"].ns));
            return new Assign(ns, callv);
          case "none":
            return null;
          default:
            throw SyntaxError("unexpected flag IcedRuntime " + v);
        }
      })();
      if (inc) {
        this.push(inc);
      }
      if (this.foundAwait) {
        rhs = new Code([], new Block([]));
        lhs_vec = [];
        _ref2 = [iced["const"].k_noop, iced["const"].k];
        for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
          k = _ref2[_i];
          val = new Value(new Literal(k));
          if (window_val) {
            klass = window_val.copy();
            klass.add(new Access(val));
            val = klass;
          }
          lhs_vec.push(val);
        }
        assign = rhs;
        for (_j = 0, _len1 = lhs_vec.length; _j < _len1; _j++) {
          v = lhs_vec[_j];
          assign = new Assign(v, assign);
        }
        this.push(assign);
      }
      if (this.isEmpty()) {
        return [];
      } else {
        return IcedRuntime.__super__.compileNode.call(this, o);
      }
    };

    IcedRuntime.prototype.icedWalkAst = function(p, o) {
      this.icedHasAutocbFlag = o.foundAutocb;
      return IcedRuntime.__super__.icedWalkAst.call(this, p, o);
    };

    return IcedRuntime;

  })(Block);

  exports.Try = Try = (function(_super) {
    __extends(Try, _super);

    function Try(attempt, errorVariable, recovery, ensure) {
      this.attempt = attempt;
      this.errorVariable = errorVariable;
      this.recovery = recovery;
      this.ensure = ensure;
    }

    Try.prototype.children = ['attempt', 'recovery', 'ensure'];

    Try.prototype.isStatement = YES;

    Try.prototype.jumps = function(o) {
      var _ref2;
      return this.attempt.jumps(o) || ((_ref2 = this.recovery) != null ? _ref2.jumps(o) : void 0);
    };

    Try.prototype.makeReturn = function(res) {
      if (this.attempt) {
        this.attempt = this.attempt.makeReturn(res);
      }
      if (this.recovery) {
        this.recovery = this.recovery.makeReturn(res);
      }
      return this;
    };

    Try.prototype.compileNode = function(o) {
      var catchPart, ensurePart, placeholder, tryPart;
      o.indent += TAB;
      tryPart = this.attempt.compileToFragments(o, LEVEL_TOP);
      catchPart = this.recovery ? (placeholder = new Literal('_error'), this.errorVariable ? this.recovery.unshift(new Assign(this.errorVariable, placeholder)) : void 0, [].concat(this.makeCode(" catch ("), placeholder.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"))) : !(this.ensure || this.recovery) ? [this.makeCode(' catch (_error) {}')] : [];
      ensurePart = this.ensure ? [].concat(this.makeCode(" finally {\n"), this.ensure.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}")) : [];
      return [].concat(this.makeCode("" + this.tab + "try {\n"), tryPart, this.makeCode("\n" + this.tab + "}"), catchPart, ensurePart);
    };

    return Try;

  })(Base);

  exports.Throw = Throw = (function(_super) {
    __extends(Throw, _super);

    function Throw(expression) {
      this.expression = expression;
      Throw.__super__.constructor.call(this);
    }

    Throw.prototype.children = ['expression'];

    Throw.prototype.isStatement = YES;

    Throw.prototype.jumps = NO;

    Throw.prototype.makeReturn = THIS;

    Throw.prototype.compileNode = function(o) {
      return [].concat(this.makeCode(this.tab + "throw "), this.expression.compileToFragments(o), this.makeCode(";"));
    };

    return Throw;

  })(Base);

  exports.Existence = Existence = (function(_super) {
    __extends(Existence, _super);

    function Existence(expression) {
      this.expression = expression;
      Existence.__super__.constructor.call(this);
    }

    Existence.prototype.children = ['expression'];

    Existence.prototype.invert = NEGATE;

    Existence.prototype.compileNode = function(o) {
      var cmp, cnj, code, _ref2;
      this.expression.front = this.front;
      code = this.expression.compile(o, LEVEL_OP);
      if (IDENTIFIER.test(code) && !o.scope.check(code)) {
        _ref2 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = _ref2[0], cnj = _ref2[1];
        code = "typeof " + code + " " + cmp + " \"undefined\" " + cnj + " " + code + " " + cmp + " null";
      } else {
        code = "" + code + " " + (this.negated ? '==' : '!=') + " null";
      }
      return [this.makeCode(o.level <= LEVEL_COND ? code : "(" + code + ")")];
    };

    return Existence;

  })(Base);

  exports.Parens = Parens = (function(_super) {
    __extends(Parens, _super);

    function Parens(body) {
      this.body = body;
      Parens.__super__.constructor.call(this);
    }

    Parens.prototype.children = ['body'];

    Parens.prototype.unwrap = function() {
      return this.body;
    };

    Parens.prototype.isComplex = function() {
      return this.body.isComplex();
    };

    Parens.prototype.compileNode = function(o) {
      var bare, expr, fragments;
      expr = this.body.unwrap();
      if (expr instanceof Value && expr.isAtomic()) {
        expr.front = this.front;
        return expr.compileToFragments(o);
      }
      fragments = expr.compileToFragments(o, LEVEL_PAREN);
      bare = o.level < LEVEL_OP && (expr instanceof Op || expr instanceof Call || (expr instanceof For && expr.returns));
      if (bare) {
        return fragments;
      } else {
        return this.wrapInBraces(fragments);
      }
    };

    return Parens;

  })(Base);

  exports.For = For = (function(_super) {
    __extends(For, _super);

    function For(body, source) {
      var _ref2;
      For.__super__.constructor.call(this);
      this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index;
      this.body = Block.wrap([body]);
      this.own = !!source.own;
      this.object = !!source.object;
      if (this.object) {
        _ref2 = [this.index, this.name], this.name = _ref2[0], this.index = _ref2[1];
      }
      if (this.index instanceof Value) {
        this.index.error('index cannot be a pattern matching expression');
      }
      this.range = this.source instanceof Value && this.source.base instanceof Range && !this.source.properties.length;
      this.pattern = this.name instanceof Value;
      if (this.range && this.index) {
        this.index.error('indexes do not apply to range loops');
      }
      if (this.range && this.pattern) {
        this.name.error('cannot pattern match over range loops');
      }
      if (this.own && !this.object) {
        this.name.error('cannot use own with for-in');
      }
      this.returns = false;
    }

    For.prototype.children = ['body', 'source', 'guard', 'step'];

    For.prototype.compileNode = function(o) {
      var body, bodyFragments, compare, compareDown, declare, declareDown, defPart, defPartFragments, down, forPartFragments, guardPart, idt1, increment, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, step, stepNum, stepVar, svar, varPart, _ref2, _ref3;
      body = Block.wrap([this.body]);
      lastJumps = (_ref2 = last(body.expressions)) != null ? _ref2.jumps() : void 0;
      if (lastJumps && lastJumps instanceof Return) {
        this.returns = false;
      }
      source = this.range ? this.source.base : this.source;
      scope = o.scope;
      if (!this.pattern) {
        name = this.name && (this.name.compile(o, LEVEL_LIST));
      }
      index = this.index && (this.index.compile(o, LEVEL_LIST));
      if (name && !this.pattern) {
        scope.find(name);
      }
      if (index) {
        scope.find(index);
      }
      if (this.returns) {
        rvar = scope.freeVariable('results');
      }
      ivar = (this.object && index) || scope.freeVariable('i');
      kvar = (this.range && name) || index || ivar;
      kvarAssign = kvar !== ivar ? "" + kvar + " = " : "";
      if (this.step && !this.range) {
        _ref3 = this.cacheToCodeFragments(this.step.cache(o, LEVEL_LIST)), step = _ref3[0], stepVar = _ref3[1];
        stepNum = stepVar.match(NUMBER);
      }
      if (this.pattern) {
        name = ivar;
      }
      varPart = '';
      guardPart = '';
      defPart = '';
      idt1 = this.tab + TAB;
      source.icedStatementAssertion();
      if (this.icedNodeFlag) {
        return this.icedCompileIced(o, {
          stepVar: stepVar,
          body: body,
          rvar: rvar,
          kvar: kvar,
          guard: this.guard
        });
      }
      if (this.range) {
        forPartFragments = source.compileToFragments(merge(o, {
          index: ivar,
          name: name,
          step: this.step
        }));
      } else {
        svar = this.source.compile(o, LEVEL_LIST);
        if ((name || this.own) && !IDENTIFIER.test(svar)) {
          defPart += "" + this.tab + (ref = scope.freeVariable('ref')) + " = " + svar + ";\n";
          svar = ref;
        }
        if (name && !this.pattern) {
          namePart = "" + name + " = " + svar + "[" + kvar + "]";
        }
        if (!this.object) {
          if (step !== stepVar) {
            defPart += "" + this.tab + step + ";\n";
          }
          if (!(this.step && stepNum && (down = parseNum(stepNum[0]) < 0))) {
            lvar = scope.freeVariable('len');
          }
          declare = "" + kvarAssign + ivar + " = 0, " + lvar + " = " + svar + ".length";
          declareDown = "" + kvarAssign + ivar + " = " + svar + ".length - 1";
          compare = "" + ivar + " < " + lvar;
          compareDown = "" + ivar + " >= 0";
          if (this.step) {
            if (stepNum) {
              if (down) {
                compare = compareDown;
                declare = declareDown;
              }
            } else {
              compare = "" + stepVar + " > 0 ? " + compare + " : " + compareDown;
              declare = "(" + stepVar + " > 0 ? (" + declare + ") : " + declareDown + ")";
            }
            increment = "" + ivar + " += " + stepVar;
          } else {
            increment = "" + (kvar !== ivar ? "++" + ivar : "" + ivar + "++");
          }
          forPartFragments = [this.makeCode("" + declare + "; " + compare + "; " + kvarAssign + increment)];
        }
      }
      if (this.returns) {
        resultPart = "" + this.tab + rvar + " = [];\n";
        returnResult = this.icedHasAutocbFlag ? "\n" + this.tab + iced["const"].autocb + "(" + rvar + "); return;" : "\n" + this.tab + "return " + rvar + ";";
        body.makeReturn(rvar);
      }
      if (this.guard) {
        if (body.expressions.length > 1) {
          body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue")));
        } else {
          if (this.guard) {
            body = Block.wrap([new If(this.guard, body)]);
          }
        }
      }
      if (this.pattern) {
        body.expressions.unshift(new Assign(this.name, new Literal("" + svar + "[" + kvar + "]")));
      }
      defPartFragments = [].concat(this.makeCode(defPart), this.pluckDirectCall(o, body));
      if (namePart) {
        varPart = "\n" + idt1 + namePart + ";";
      }
      if (this.object) {
        forPartFragments = [this.makeCode("" + kvar + " in " + svar)];
        if (this.own) {
          guardPart = "\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + kvar + ")) continue;";
        }
      }
      bodyFragments = body.compileToFragments(merge(o, {
        indent: idt1
      }), LEVEL_TOP);
      if (bodyFragments && (bodyFragments.length > 0)) {
        bodyFragments = [].concat(this.makeCode("\n"), bodyFragments, this.makeCode("\n"));
      }
      return [].concat(defPartFragments, this.makeCode("" + (resultPart || '') + this.tab + "for ("), forPartFragments, this.makeCode(") {" + guardPart + varPart), bodyFragments, this.makeCode("" + this.tab + "}" + (returnResult || '')));
    };

    For.prototype.pluckDirectCall = function(o, body) {
      var base, defs, expr, fn, idx, ref, val, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
      defs = [];
      _ref2 = body.expressions;
      for (idx = _i = 0, _len = _ref2.length; _i < _len; idx = ++_i) {
        expr = _ref2[idx];
        expr = expr.unwrapAll();
        if (!(expr instanceof Call)) {
          continue;
        }
        val = (_ref3 = expr.variable) != null ? _ref3.unwrapAll() : void 0;
        if (!((val instanceof Code) || (val instanceof Value && ((_ref4 = val.base) != null ? _ref4.unwrapAll() : void 0) instanceof Code && val.properties.length === 1 && ((_ref5 = (_ref6 = val.properties[0].name) != null ? _ref6.value : void 0) === 'call' || _ref5 === 'apply')))) {
          continue;
        }
        fn = ((_ref7 = val.base) != null ? _ref7.unwrapAll() : void 0) || val;
        ref = new Literal(o.scope.freeVariable('fn'));
        base = new Value(ref);
        if (val.base) {
          _ref8 = [base, val], val.base = _ref8[0], base = _ref8[1];
        }
        body.expressions[idx] = new Call(base, expr.args);
        defs = defs.concat(this.makeCode(this.tab), new Assign(ref, fn).compileToFragments(o, LEVEL_TOP), this.makeCode(';\n'));
      }
      return defs;
    };

    For.prototype.icedCompileIced = function(o, d) {
      var a1, a2, a3, a4, a5, b, begin, body, condition, empty_arr, end, excl, guard, iname, init, ival, key, key_lit, key_val, keys, keys_access, keys_len, keys_val, kval, len, len_rhs, len_val, loop_body, loop_keys, loop_source, neg, pos, positive, pre_body, ref, ref_val, ref_val_copy, rvar, scope, source_access, step, stepVal;
      body = d.body;
      condition = null;
      init = [];
      step = null;
      scope = o.scope;
      pre_body = new Block([]);
      if (this.object) {
        ref = scope.freeVariable('ref');
        ref_val = new Value(new Literal(ref));
        a1 = new Assign(ref_val, this.source);
        keys = scope.freeVariable('keys');
        keys_val = new Value(new Literal(keys));
        key = scope.freeVariable('k');
        key_lit = new Literal(key);
        key_val = new Value(key_lit);
        empty_arr = new Value(new Arr);
        loop_body = new Block([key_val]);
        loop_source = {
          object: true,
          name: key_lit,
          source: ref_val
        };
        loop_keys = new For(loop_body, loop_source);
        a2 = new Assign(keys_val, loop_keys);
        iname = scope.freeVariable('i');
        ival = new Value(new Literal(iname));
        a3 = new Assign(ival, new Value(new Literal(0)));
        init = [a1, a2, a3];
        keys_len = keys_val.copy();
        keys_len.add(new Access(new Value(new Literal("length"))));
        condition = new Op('<', ival, keys_len);
        step = new Op('++', ival);
        if (this.name) {
          source_access = ref_val.copy();
          source_access.add(new Index(this.index));
          a5 = new Assign(this.name, source_access);
          pre_body.unshift(a5);
        }
        keys_access = keys_val.copy();
        keys_access.add(new Index(ival));
        a4 = new Assign(this.index, keys_access);
        pre_body.unshift(a4);
      } else if (this.range) {
        if (!this.name) {
          this.name = new Literal(d.kvar);
        }
        begin = new Value(new Literal("_begin"));
        end = new Value(new Literal("_end"));
        positive = new Value(new Literal("_positive"));
        stepVal = this.step || new Literal(1);
        step = new If(positive, new Op("+=", this.name, stepVal));
        step.addElse(new Op("-=", this.name, stepVal));
        excl = this.source.base.exclusive ? "=" : '';
        pos = new Op("&&", new Op("===", positive, new Literal(true)), new Op(">" + excl, this.name, this.source.base.to));
        neg = new Op("&&", new Op("===", positive, new Literal(false)), new Op("<" + excl, this.name, this.source.base.to));
        condition = new Op("||", new Parens(pos), new Parens(neg));
        condition = condition.invert();
        init = [new Assign(this.name, this.source.base.from), new Assign(begin, this.source.base.from), new Assign(end, this.source.base.to), new Assign(positive, new Op(">", end, begin))];
      } else if (!this.range && this.name) {
        kval = new Value(new Literal(d.kvar));
        len = scope.freeVariable('len');
        ref = scope.freeVariable('ref');
        ref_val = new Value(new Literal(ref));
        len_val = new Value(new Literal(len));
        a1 = new Assign(ref_val, this.source);
        len_rhs = ref_val.copy().add(new Access(new Value(new Literal("length"))));
        a2 = new Assign(len_val, len_rhs);
        a3 = new Assign(kval, new Value(new Literal(0)));
        init = [a1, a2, a3];
        condition = new Op('<', kval, len_val);
        step = new Op('++', kval);
        ref_val_copy = ref_val.copy();
        ref_val_copy.add(new Index(kval));
        a4 = new Assign(this.name, ref_val_copy);
        pre_body.unshift(a4);
      }
      rvar = d.rvar;
      guard = d.guard;
      b = this.icedWrap({
        condition: condition,
        body: body,
        init: init,
        step: step,
        rvar: rvar,
        guard: guard,
        pre_body: pre_body
      });
      return b.compileNode(o);
    };

    return For;

  })(While);

  exports.Switch = Switch = (function(_super) {
    __extends(Switch, _super);

    function Switch(subject, cases, otherwise) {
      this.subject = subject;
      this.cases = cases;
      this.otherwise = otherwise;
      Switch.__super__.constructor.call(this);
    }

    Switch.prototype.children = ['subject', 'cases', 'otherwise'];

    Switch.prototype.isStatement = YES;

    Switch.prototype.jumps = function(o) {
      var block, conds, jumpNode, _i, _len, _ref2, _ref3, _ref4;
      if (o == null) {
        o = {
          block: true
        };
      }
      _ref2 = this.cases;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        _ref3 = _ref2[_i], conds = _ref3[0], block = _ref3[1];
        if (jumpNode = block.jumps(o)) {
          return jumpNode;
        }
      }
      return (_ref4 = this.otherwise) != null ? _ref4.jumps(o) : void 0;
    };

    Switch.prototype.makeReturn = function(res) {
      var pair, _i, _len, _ref2, _ref3;
      _ref2 = this.cases;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        pair = _ref2[_i];
        pair[1].makeReturn(res);
      }
      if (res) {
        this.otherwise || (this.otherwise = new Block([new Literal('void 0')]));
      }
      if ((_ref3 = this.otherwise) != null) {
        _ref3.makeReturn(res);
      }
      return this;
    };

    Switch.prototype.compileNode = function(o) {
      var block, body, cond, conditions, expr, fragments, i, idt1, idt2, _i, _j, _len, _len1, _ref2, _ref3, _ref4;
      if (this.subject) {
        this.subject.icedStatementAssertion();
      }
      idt1 = o.indent + TAB;
      idt2 = o.indent = idt1 + TAB;
      fragments = [].concat(this.makeCode(this.tab + "switch ("), (this.subject ? this.subject.compileToFragments(o, LEVEL_PAREN) : this.makeCode("false")), this.makeCode(") {\n"));
      _ref2 = this.cases;
      for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
        _ref3 = _ref2[i], conditions = _ref3[0], block = _ref3[1];
        _ref4 = flatten([conditions]);
        for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) {
          cond = _ref4[_j];
          if (!this.subject) {
            cond = cond.invert();
          }
          fragments = fragments.concat(this.makeCode(idt1 + "case "), cond.compileToFragments(o, LEVEL_PAREN), this.makeCode(":\n"));
        }
        if ((body = block.compileToFragments(o, LEVEL_TOP)).length > 0) {
          fragments = fragments.concat(body, this.makeCode('\n'));
        }
        if (i === this.cases.length - 1 && !this.otherwise) {
          break;
        }
        expr = this.lastNonComment(block.expressions);
        if (expr instanceof Return || (expr instanceof Literal && expr.jumps() && expr.value !== 'debugger')) {
          continue;
        }
        fragments.push(cond.makeCode(idt2 + 'break;\n'));
      }
      if (this.otherwise && this.otherwise.expressions.length) {
        fragments.push.apply(fragments, [this.makeCode(idt1 + "default:\n")].concat(__slice.call(this.otherwise.compileToFragments(o, LEVEL_TOP)), [this.makeCode("\n")]));
      }
      fragments.push(this.makeCode(this.tab + '}'));
      return fragments;
    };

    Switch.prototype.icedCallContinuation = function() {
      var block, condition, _i, _len, _ref2, _ref3;
      _ref2 = this.cases;
      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
        _ref3 = _ref2[_i], condition = _ref3[0], block = _ref3[1];
        block.icedThreadReturn();
      }
      if (this.otherwise != null) {
        return this.otherwise.icedThreadReturn();
      } else {
        return this.otherwise = new Block([new IcedTailCall]);
      }
    };

    return Switch;

  })(Base);

  exports.If = If = (function(_super) {
    __extends(If, _super);

    function If(condition, body, options) {
      this.body = body;
      if (options == null) {
        options = {};
      }
      If.__super__.constructor.call(this);
      this.condition = options.type === 'unless' ? condition.invert() : condition;
      this.elseBody = null;
      this.isChain = false;
      this.soak = options.soak;
    }

    If.prototype.children = ['condition', 'body', 'elseBody'];

    If.prototype.bodyNode = function() {
      var _ref2;
      return (_ref2 = this.body) != null ? _ref2.unwrap() : void 0;
    };

    If.prototype.elseBodyNode = function() {
      var _ref2;
      return (_ref2 = this.elseBody) != null ? _ref2.unwrap() : void 0;
    };

    If.prototype.addElse = function(elseBody) {
      if (this.isChain) {
        this.elseBodyNode().addElse(elseBody);
      } else {
        this.isChain = elseBody instanceof If;
        this.elseBody = this.ensureBlock(elseBody);
        this.elseBody.updateLocationDataIfMissing(elseBody.locationData);
      }
      return this;
    };

    If.prototype.isStatement = function(o) {
      var _ref2;
      return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref2 = this.elseBodyNode()) != null ? _ref2.isStatement(o) : void 0);
    };

    If.prototype.jumps = function(o) {
      var _ref2;
      return this.body.jumps(o) || ((_ref2 = this.elseBody) != null ? _ref2.jumps(o) : void 0);
    };

    If.prototype.compileNode = function(o) {
      this.condition.icedStatementAssertion();
      if (this.isStatement(o || this.icedIsCpsPivot())) {
        return this.compileStatement(o);
      } else {
        return this.compileExpression(o);
      }
    };

    If.prototype.makeReturn = function(res) {
      if (res) {
        this.elseBody || (this.elseBody = new Block([new Literal('void 0')]));
      }
      this.body && (this.body = new Block([this.body.makeReturn(res)]));
      this.elseBody && (this.elseBody = new Block([this.elseBody.makeReturn(res)]));
      return this;
    };

    If.prototype.ensureBlock = function(node) {
      if (node instanceof Block) {
        return node;
      } else {
        return new Block([node]);
      }
    };

    If.prototype.compileStatement = function(o) {
      var answer, body, child, cond, exeq, ifPart, indent;
      child = del(o, 'chainChild');
      exeq = del(o, 'isExistentialEquals');
      if (exeq) {
        return new If(this.condition.invert(), this.elseBodyNode(), {
          type: 'if'
        }).compileToFragments(o);
      }
      indent = o.indent + TAB;
      cond = this.condition.compileToFragments(o, LEVEL_PAREN);
      body = this.ensureBlock(this.body).compileToFragments(merge(o, {
        indent: indent
      }));
      ifPart = [].concat(this.makeCode("if ("), cond, this.makeCode(") {\n"), body, this.makeCode("\n" + this.tab + "}"));
      if (!child) {
        ifPart.unshift(this.makeCode(this.tab));
      }
      if (!this.elseBody) {
        return ifPart;
      }
      answer = ifPart.concat(this.makeCode(' else '));
      if (this.isChain) {
        o.chainChild = true;
        answer = answer.concat(this.elseBody.unwrap().compileToFragments(o, LEVEL_TOP));
      } else {
        answer = answer.concat(this.makeCode("{\n"), this.elseBody.compileToFragments(merge(o, {
          indent: indent
        }), LEVEL_TOP), this.makeCode("\n" + this.tab + "}"));
      }
      return answer;
    };

    If.prototype.compileExpression = function(o) {
      var alt, body, cond, fragments;
      cond = this.condition.compileToFragments(o, LEVEL_COND);
      body = this.bodyNode().compileToFragments(o, LEVEL_LIST);
      alt = this.elseBodyNode() ? this.elseBodyNode().compileToFragments(o, LEVEL_LIST) : [this.makeCode('void 0')];
      fragments = cond.concat(this.makeCode(" ? "), body, this.makeCode(" : "), alt);
      if (o.level >= LEVEL_COND) {
        return this.wrapInBraces(fragments);
      } else {
        return fragments;
      }
    };

    If.prototype.unfoldSoak = function() {
      return this.soak && this;
    };

    If.prototype.icedCallContinuation = function() {
      if (this.elseBody) {
        this.elseBody.icedThreadReturn();
        this.isChain = false;
      } else {
        this.addElse(new IcedTailCall);
      }
      return this.body.icedThreadReturn();
    };

    return If;

  })(Base);

  Closure = {
    wrap: function(expressions, statement, noReturn) {
      var args, argumentsNode, call, func, meth;
      if (expressions.jumps()) {
        return expressions;
      }
      func = new Code([], Block.wrap([expressions]));
      args = [];
      argumentsNode = expressions.contains(this.isLiteralArguments);
      if (argumentsNode && expressions.classBody) {
        argumentsNode.error("Class bodies shouldn't reference arguments");
      }
      if (argumentsNode || expressions.contains(this.isLiteralThis)) {
        meth = new Literal(argumentsNode ? 'apply' : 'call');
        args = [new Literal('this')];
        if (argumentsNode) {
          args.push(new Literal('arguments'));
        }
        func = new Value(func, [new Access(meth)]);
      }
      func.noReturn = noReturn;
      call = new Call(func, args);
      if (statement) {
        return Block.wrap([call]);
      } else {
        return call;
      }
    },
    isLiteralArguments: function(node) {
      return node instanceof Literal && node.value === 'arguments' && !node.asKey;
    },
    isLiteralThis: function(node) {
      return (node instanceof Literal && node.value === 'this' && !node.asKey) || (node instanceof Code && node.bound) || (node instanceof Call && node.isSuper);
    }
  };

  unfoldSoak = function(o, parent, name) {
    var ifn;
    if (!(ifn = parent[name].unfoldSoak(o))) {
      return;
    }
    parent[name] = ifn.body;
    ifn.body = new Value(parent);
    return ifn;
  };

  CpsCascade = {
    wrap: function(statement, rest, returnValue, o) {
      var args, block, call, cont, e, func;
      func = new Code([new Param(new Literal(iced["const"].k))], Block.wrap([statement]), 'icedgen');
      args = [];
      if (returnValue) {
        returnValue.bindName(o);
        args.push(returnValue);
      }
      block = Block.wrap([rest]);
      if ((e = block.icedGetSingle()) && e instanceof IcedTailCall && e.canInline()) {
        cont = e.extractFunc();
      } else {
        cont = new Code(args, block, 'icedgen');
      }
      call = new Call(func, [cont]);
      return new Block([call]);
    }
  };

  IcedTailCall = (function(_super) {
    __extends(IcedTailCall, _super);

    function IcedTailCall(func, val) {
      this.func = func;
      if (val == null) {
        val = null;
      }
      IcedTailCall.__super__.constructor.call(this);
      if (!this.func) {
        this.func = iced["const"].k;
      }
      this.value = val;
    }

    IcedTailCall.prototype.children = ['value'];

    IcedTailCall.prototype.assignValue = function(v) {
      return this.value = v;
    };

    IcedTailCall.prototype.canInline = function() {
      return !this.value || this.value instanceof IcedReturnValue;
    };

    IcedTailCall.prototype.literalFunc = function() {
      return new Literal(this.func);
    };

    IcedTailCall.prototype.extractFunc = function() {
      return new Value(this.literalFunc());
    };

    IcedTailCall.prototype.compileNode = function(o) {
      var args, f, out;
      f = this.literalFunc();
      out = o.level === LEVEL_TOP ? this.value ? new Block([this.value, new Call(f)]) : new Call(f) : (args = this.value ? [this.value] : [], new Call(f, args));
      return out.compileNode(o);
    };

    return IcedTailCall;

  })(Base);

  IcedReturnValue = (function(_super) {
    __extends(IcedReturnValue, _super);

    IcedReturnValue.counter = 0;

    function IcedReturnValue() {
      IcedReturnValue.__super__.constructor.call(this, null, null, false);
    }

    IcedReturnValue.prototype.bindName = function(o) {
      var l;
      l = "" + (o.scope.freeVariable(iced["const"].param, false)) + "_" + (IcedReturnValue.counter++);
      return this.name = new Literal(l);
    };

    IcedReturnValue.prototype.compile = function(o) {
      if (!this.name) {
        this.bindName(o);
      }
      return IcedReturnValue.__super__.compile.call(this, o);
    };

    return IcedReturnValue;

  })(Param);

  InlineRuntime = {
    generate: function(ns_window) {
      var a1, a2, af, apply_call, assignments, body, call_meth, cn, cnt, cnt_member, constructor_assign, constructor_body, constructor_code, constructor_name, constructor_params, decr, defer_assign, defer_body, defer_code, defer_name, defer_params, dp, dp_value, fn, fn_assign, fn_code, fn_name, if_body, if_cond, if_expr, inc, inner_body, inner_code, inner_params, ip, k, k_member, klass, klass_assign, my_apply, my_if, my_null, ns, ns_obj, ns_val, obj, outer_block, p1, ret_member, tr_assign, tr_block, tr_code, tr_name, tr_params, _fulfill_assign, _fulfill_body, _fulfill_call, _fulfill_code, _fulfill_method, _fulfill_name;
      k = new Literal("continuation");
      cnt = new Literal("count");
      cn = new Value(new Literal(iced["const"].Deferrals));
      ns = new Value(new Literal(iced["const"].ns));
      if (ns_window) {
        ns_window.add(new Access(ns));
        ns = ns_window;
      }
      k_member = new Value(new Literal("this"));
      k_member.add(new Access(k));
      p1 = new Param(k_member);
      cnt_member = new Value(new Literal("this"));
      cnt_member.add(new Access(cnt));
      ret_member = new Value(new Literal("this"));
      ret_member.add(new Access(new Value(new Literal(iced["const"].retslot))));
      a1 = new Assign(cnt_member, new Value(new Literal(1)));
      a2 = new Assign(ret_member, NULL());
      constructor_params = [p1];
      constructor_body = new Block([a1, a2]);
      constructor_code = new Code(constructor_params, constructor_body);
      constructor_name = new Value(new Literal("constructor"));
      constructor_assign = new Assign(constructor_name, constructor_code);
      if_expr = new Call(k_member, [ret_member]);
      if_body = new Block([if_expr]);
      decr = new Op('--', cnt_member);
      if_cond = new Op('!', decr);
      my_if = new If(if_cond, if_body);
      _fulfill_body = new Block([my_if]);
      _fulfill_code = new Code([], _fulfill_body);
      _fulfill_name = new Value(new Literal(iced["const"].fulfill));
      _fulfill_assign = new Assign(_fulfill_name, _fulfill_code);
      inc = new Op("++", cnt_member);
      ip = new Literal("inner_params");
      dp = new Literal("defer_params");
      dp_value = new Value(dp);
      call_meth = new Value(dp);
      af = new Literal(iced["const"].assign_fn);
      call_meth.add(new Access(af, "soak"));
      my_apply = new Literal("apply");
      call_meth.add(new Access(my_apply, "soak"));
      my_null = NULL();
      apply_call = new Call(call_meth, [my_null, new Value(ip)]);
      _fulfill_method = new Value(new Literal("this"));
      _fulfill_method.add(new Access(new Literal(iced["const"].fulfill)));
      _fulfill_call = new Call(_fulfill_method, []);
      inner_body = new Block([apply_call, _fulfill_call]);
      inner_params = [new Param(ip, null, true)];
      inner_code = new Code(inner_params, inner_body, "boundfunc");
      defer_body = new Block([inc, inner_code]);
      defer_params = [new Param(dp)];
      defer_code = new Code(defer_params, defer_body);
      defer_name = new Value(new Literal(iced["const"].defer_method));
      defer_assign = new Assign(defer_name, defer_code);
      assignments = [constructor_assign, _fulfill_assign, defer_assign];
      obj = new Obj(assignments, true);
      body = new Block([new Value(obj)]);
      klass = new Class(null, null, body);
      klass_assign = new Assign(cn, klass, "object");
      outer_block = new Block([NULL()]);
      fn_code = new Code([], outer_block);
      fn_name = new Value(new Literal(iced["const"].findDeferral));
      fn_assign = new Assign(fn_name, fn_code, "object");
      fn = new Literal("_fn");
      tr_block = new Block([new Call(new Value(fn), [])]);
      tr_params = [new Param(fn)];
      tr_code = new Code(tr_params, tr_block);
      tr_name = new Value(new Literal(iced["const"].trampoline));
      tr_assign = new Assign(tr_name, tr_code, "object");
      ns_obj = new Obj([klass_assign, fn_assign, tr_assign], true);
      ns_val = new Value(ns_obj);
      return new Assign(ns, ns_val);
    }
  };

  UTILITIES = {
    "extends": function() {
      return "function(child, parent) { for (var key in parent) { if (" + (utility('hasProp')) + ".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }";
    },
    bind: function() {
      return 'function(fn, me){ return function(){ return fn.apply(me, arguments); }; }';
    },
    indexOf: function() {
      return "[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }";
    },
    modulo: function() {
      return "function(a, b) { return (+a % (b = +b) + b) % b; }";
    },
    hasProp: function() {
      return '{}.hasOwnProperty';
    },
    slice: function() {
      return '[].slice';
    }
  };

  LEVEL_TOP = 1;

  LEVEL_PAREN = 2;

  LEVEL_LIST = 3;

  LEVEL_COND = 4;

  LEVEL_OP = 5;

  LEVEL_ACCESS = 6;

  TAB = '  ';

  IDENTIFIER_STR = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";

  IDENTIFIER = RegExp("^" + IDENTIFIER_STR + "$");

  SIMPLENUM = /^[+-]?\d+$/;

  HEXNUM = /^[+-]?0x[\da-f]+/i;

  NUMBER = /^[+-]?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)$/i;

  METHOD_DEF = RegExp("^(" + IDENTIFIER_STR + ")(\\.prototype)?(?:\\.(" + IDENTIFIER_STR + ")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\])$");

  IS_STRING = /^['"]/;

  IS_REGEX = /^\//;

  utility = function(name) {
    var ref;
    ref = "__" + name;
    Scope.root.assign(ref, UTILITIES[name]());
    return ref;
  };

  multident = function(code, tab) {
    code = code.replace(/\n/g, '$&' + tab);
    return code.replace(/\s+$/, '');
  };

  parseNum = function(x) {
    if (x == null) {
      return 0;
    } else if (x.match(HEXNUM)) {
      return parseInt(x, 16);
    } else {
      return parseFloat(x);
    }
  };

  isLiteralArguments = function(node) {
    return node instanceof Literal && node.value === 'arguments' && !node.asKey;
  };

  isLiteralThis = function(node) {
    return (node instanceof Literal && node.value === 'this' && !node.asKey) || (node instanceof Code && node.bound) || (node instanceof Call && node.isSuper);
  };

  unfoldSoak = function(o, parent, name) {
    var ifn;
    if (!(ifn = parent[name].unfoldSoak(o))) {
      return;
    }
    parent[name] = ifn.body;
    ifn.body = new Value(parent);
    return ifn;
  };

}).call(this);

}).call(this,"/")
},{"./helpers":3,"./lexer":5,"./scope":10,"iced-runtime":19,"path":13}],7:[function(_dereq_,module,exports){
(function (process){
/* parser generated by jison 0.4.13 */
/*
  Returns a Parser object of the following structure:

  Parser: {
    yy: {}
  }

  Parser.prototype: {
    yy: {},
    trace: function(),
    symbols_: {associative list: name ==> number},
    terminals_: {associative list: number ==> name},
    productions_: [...],
    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),
    table: [...],
    defaultActions: {...},
    parseError: function(str, hash),
    parse: function(input),

    lexer: {
        EOF: 1,
        parseError: function(str, hash),
        setInput: function(input),
        input: function(),
        unput: function(str),
        more: function(),
        less: function(n),
        pastInput: function(),
        upcomingInput: function(),
        showPosition: function(),
        test_match: function(regex_match_array, rule_index),
        next: function(),
        lex: function(),
        begin: function(condition),
        popState: function(),
        _currentRules: function(),
        topState: function(),
        pushState: function(condition),

        options: {
            ranges: boolean           (optional: true ==> token location info will include a .range[] member)
            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)
            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)
        },

        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),
        rules: [...],
        conditions: {associative list: name ==> set},
    }
  }


  token location info (@$, _$, etc.): {
    first_line: n,
    last_line: n,
    first_column: n,
    last_column: n,
    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)
  }


  the parseError function receives a 'hash' object with these members for lexer and parser errors: {
    text:        (matched text)
    token:       (the produced terminal token, if any)
    line:        (yylineno)
  }
  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {
    loc:         (yylloc)
    expected:    (string describing the set of expected tokens)
    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)
  }
*/
var parser = (function(){
var parser = {trace: function trace() { },
yy: {},
symbols_: {"error":2,"Root":3,"Body":4,"Line":5,"TERMINATOR":6,"Expression":7,"Statement":8,"Return":9,"Comment":10,"STATEMENT":11,"Await":12,"AWAIT":13,"Block":14,"Value":15,"Invocation":16,"Code":17,"Operation":18,"Assign":19,"If":20,"Try":21,"While":22,"For":23,"Switch":24,"Class":25,"Throw":26,"Defer":27,"INDENT":28,"OUTDENT":29,"Identifier":30,"IDENTIFIER":31,"AlphaNumeric":32,"NUMBER":33,"STRING":34,"Literal":35,"JS":36,"REGEX":37,"DEBUGGER":38,"UNDEFINED":39,"NULL":40,"BOOL":41,"Assignable":42,"=":43,"AssignObj":44,"ObjAssignable":45,":":46,"ThisProperty":47,"RETURN":48,"HERECOMMENT":49,"PARAM_START":50,"ParamList":51,"PARAM_END":52,"FuncGlyph":53,"->":54,"=>":55,"OptComma":56,",":57,"Param":58,"ParamVar":59,"...":60,"Array":61,"Object":62,"Splat":63,"SimpleAssignable":64,"Accessor":65,"Parenthetical":66,"Range":67,"This":68,".":69,"?.":70,"::":71,"?::":72,"Index":73,"INDEX_START":74,"IndexValue":75,"INDEX_END":76,"INDEX_SOAK":77,"Slice":78,"{":79,"AssignList":80,"}":81,"CLASS":82,"EXTENDS":83,"OptFuncExist":84,"Arguments":85,"SUPER":86,"DEFER":87,"FUNC_EXIST":88,"CALL_START":89,"CALL_END":90,"ArgList":91,"THIS":92,"@":93,"[":94,"]":95,"RangeDots":96,"..":97,"Arg":98,"SimpleArgs":99,"TRY":100,"Catch":101,"FINALLY":102,"CATCH":103,"THROW":104,"(":105,")":106,"WhileSource":107,"WHILE":108,"WHEN":109,"UNTIL":110,"Loop":111,"LOOP":112,"ForBody":113,"FOR":114,"ForStart":115,"ForSource":116,"ForVariables":117,"OWN":118,"ForValue":119,"FORIN":120,"FOROF":121,"BY":122,"SWITCH":123,"Whens":124,"ELSE":125,"When":126,"LEADING_WHEN":127,"IfBlock":128,"IF":129,"POST_IF":130,"UNARY":131,"UNARY_MATH":132,"-":133,"+":134,"--":135,"++":136,"?":137,"MATH":138,"**":139,"SHIFT":140,"COMPARE":141,"LOGIC":142,"RELATION":143,"COMPOUND_ASSIGN":144,"$accept":0,"$end":1},
terminals_: {2:"error",6:"TERMINATOR",11:"STATEMENT",13:"AWAIT",28:"INDENT",29:"OUTDENT",31:"IDENTIFIER",33:"NUMBER",34:"STRING",36:"JS",37:"REGEX",38:"DEBUGGER",39:"UNDEFINED",40:"NULL",41:"BOOL",43:"=",46:":",48:"RETURN",49:"HERECOMMENT",50:"PARAM_START",52:"PARAM_END",54:"->",55:"=>",57:",",60:"...",69:".",70:"?.",71:"::",72:"?::",74:"INDEX_START",76:"INDEX_END",77:"INDEX_SOAK",79:"{",81:"}",82:"CLASS",83:"EXTENDS",86:"SUPER",87:"DEFER",88:"FUNC_EXIST",89:"CALL_START",90:"CALL_END",92:"THIS",93:"@",94:"[",95:"]",97:"..",100:"TRY",102:"FINALLY",103:"CATCH",104:"THROW",105:"(",106:")",108:"WHILE",109:"WHEN",110:"UNTIL",112:"LOOP",114:"FOR",118:"OWN",120:"FORIN",121:"FOROF",122:"BY",123:"SWITCH",125:"ELSE",127:"LEADING_WHEN",129:"IF",130:"POST_IF",131:"UNARY",132:"UNARY_MATH",133:"-",134:"+",135:"--",136:"++",137:"?",138:"MATH",139:"**",140:"SHIFT",141:"COMPARE",142:"LOGIC",143:"RELATION",144:"COMPOUND_ASSIGN"},
productions_: [0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[8,1],[8,1],[8,1],[8,1],[12,2],[12,2],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[14,2],[14,3],[30,1],[32,1],[32,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[19,3],[19,4],[19,5],[44,1],[44,3],[44,5],[44,1],[45,1],[45,1],[45,1],[9,2],[9,1],[10,1],[17,5],[17,2],[53,1],[53,1],[56,0],[56,1],[51,0],[51,1],[51,3],[51,4],[51,6],[58,1],[58,2],[58,3],[58,1],[59,1],[59,1],[59,1],[59,1],[63,2],[64,1],[64,2],[64,2],[64,1],[42,1],[42,1],[42,1],[15,1],[15,1],[15,1],[15,1],[15,1],[65,2],[65,2],[65,2],[65,2],[65,2],[65,1],[65,1],[73,3],[73,2],[75,1],[75,1],[62,4],[80,0],[80,1],[80,3],[80,4],[80,6],[25,1],[25,2],[25,3],[25,4],[25,2],[25,3],[25,4],[25,5],[16,3],[16,3],[16,1],[16,2],[27,2],[84,0],[84,1],[85,2],[85,4],[68,1],[68,1],[47,2],[61,2],[61,4],[96,1],[96,1],[67,5],[78,3],[78,2],[78,2],[78,1],[91,1],[91,3],[91,4],[91,4],[91,6],[98,1],[98,1],[98,1],[99,1],[99,3],[21,2],[21,3],[21,4],[21,5],[101,3],[101,3],[101,2],[26,2],[66,3],[66,5],[107,2],[107,4],[107,2],[107,4],[22,2],[22,2],[22,2],[22,1],[111,2],[111,2],[23,2],[23,2],[23,2],[113,2],[113,2],[115,2],[115,3],[119,1],[119,1],[119,1],[119,1],[117,1],[117,3],[116,2],[116,2],[116,4],[116,4],[116,4],[116,6],[116,6],[24,5],[24,7],[24,4],[24,6],[124,1],[124,2],[126,3],[126,4],[128,3],[128,5],[20,1],[20,3],[20,3],[20,3],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,5],[18,4],[18,3]],
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
/* this == yyval */

var $0 = $$.length - 1;
switch (yystate) {
case 1:return this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Block);
break;
case 2:return this.$ = $$[$0];
break;
case 3:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(yy.Block.wrap([$$[$0]]));
break;
case 4:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].push($$[$0]));
break;
case 5:this.$ = $$[$0-1];
break;
case 6:this.$ = $$[$0];
break;
case 7:this.$ = $$[$0];
break;
case 8:this.$ = $$[$0];
break;
case 9:this.$ = $$[$0];
break;
case 10:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
break;
case 11:this.$ = $$[$0];
break;
case 12:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Await($$[$0]));
break;
case 13:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Await(yy.Block.wrap([$$[$0]])));
break;
case 14:this.$ = $$[$0];
break;
case 15:this.$ = $$[$0];
break;
case 16:this.$ = $$[$0];
break;
case 17:this.$ = $$[$0];
break;
case 18:this.$ = $$[$0];
break;
case 19:this.$ = $$[$0];
break;
case 20:this.$ = $$[$0];
break;
case 21:this.$ = $$[$0];
break;
case 22:this.$ = $$[$0];
break;
case 23:this.$ = $$[$0];
break;
case 24:this.$ = $$[$0];
break;
case 25:this.$ = $$[$0];
break;
case 26:this.$ = $$[$0];
break;
case 27:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Block);
break;
case 28:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]);
break;
case 29:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
break;
case 30:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
break;
case 31:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
break;
case 32:this.$ = $$[$0];
break;
case 33:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
break;
case 34:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
break;
case 35:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
break;
case 36:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Undefined);
break;
case 37:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Null);
break;
case 38:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Bool($$[$0]));
break;
case 39:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0]));
break;
case 40:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0]));
break;
case 41:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1]));
break;
case 42:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
break;
case 43:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-2])(new yy.Value($$[$0-2])), $$[$0], 'object'));
break;
case 44:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-4])(new yy.Value($$[$0-4])), $$[$0-1], 'object'));
break;
case 45:this.$ = $$[$0];
break;
case 46:this.$ = $$[$0];
break;
case 47:this.$ = $$[$0];
break;
case 48:this.$ = $$[$0];
break;
case 49:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Return($$[$0]));
break;
case 50:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Return);
break;
case 51:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Comment($$[$0]));
break;
case 52:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Code($$[$0-3], $$[$0], $$[$0-1]));
break;
case 53:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Code([], $$[$0], $$[$0-1]));
break;
case 54:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('func');
break;
case 55:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('boundfunc');
break;
case 56:this.$ = $$[$0];
break;
case 57:this.$ = $$[$0];
break;
case 58:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]);
break;
case 59:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
break;
case 60:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));
break;
case 61:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));
break;
case 62:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));
break;
case 63:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Param($$[$0]));
break;
case 64:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Param($$[$0-1], null, true));
break;
case 65:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Param($$[$0-2], $$[$0]));
break;
case 66:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Expansion);
break;
case 67:this.$ = $$[$0];
break;
case 68:this.$ = $$[$0];
break;
case 69:this.$ = $$[$0];
break;
case 70:this.$ = $$[$0];
break;
case 71:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Splat($$[$0-1]));
break;
case 72:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
break;
case 73:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].add($$[$0]));
break;
case 74:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value($$[$0-1], [].concat($$[$0])));
break;
case 75:this.$ = $$[$0];
break;
case 76:this.$ = $$[$0];
break;
case 77:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
break;
case 78:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
break;
case 79:this.$ = $$[$0];
break;
case 80:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
break;
case 81:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
break;
case 82:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
break;
case 83:this.$ = $$[$0];
break;
case 84:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0]));
break;
case 85:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0].setCustom()));
break;
case 86:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0], 'soak'));
break;
case 87:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal('prototype'))), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]);
break;
case 88:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal('prototype'), 'soak')), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]);
break;
case 89:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Access(new yy.Literal('prototype')));
break;
case 90:this.$ = $$[$0];
break;
case 91:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]);
break;
case 92:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(yy.extend($$[$0], {
          soak: true
        }));
break;
case 93:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Index($$[$0]));
break;
case 94:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Slice($$[$0]));
break;
case 95:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Obj($$[$0-2], $$[$0-3].generated));
break;
case 96:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]);
break;
case 97:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
break;
case 98:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));
break;
case 99:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));
break;
case 100:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));
break;
case 101:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Class);
break;
case 102:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class(null, null, $$[$0]));
break;
case 103:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class(null, $$[$0]));
break;
case 104:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class(null, $$[$0-1], $$[$0]));
break;
case 105:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class($$[$0]));
break;
case 106:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class($$[$0-1], null, $$[$0]));
break;
case 107:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class($$[$0-2], $$[$0]));
break;
case 108:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Class($$[$0-3], $$[$0-1], $$[$0]));
break;
case 109:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1]));
break;
case 110:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1]));
break;
case 111:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))]));
break;
case 112:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Call('super', $$[$0]));
break;
case 113:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Defer($$[$0], yylineno));
break;
case 114:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(false);
break;
case 115:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(true);
break;
case 116:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([]);
break;
case 117:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]);
break;
case 118:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal('this')));
break;
case 119:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal('this')));
break;
case 120:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('this')), [yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))], 'this'));
break;
case 121:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Arr([]));
break;
case 122:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Arr($$[$0-2]));
break;
case 123:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('inclusive');
break;
case 124:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('exclusive');
break;
case 125:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]));
break;
case 126:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Range($$[$0-2], $$[$0], $$[$0-1]));
break;
case 127:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range($$[$0-1], null, $$[$0]));
break;
case 128:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range(null, $$[$0], $$[$0-1]));
break;
case 129:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Range(null, null, $$[$0]));
break;
case 130:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
break;
case 131:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));
break;
case 132:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));
break;
case 133:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]);
break;
case 134:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));
break;
case 135:this.$ = $$[$0];
break;
case 136:this.$ = $$[$0];
break;
case 137:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Expansion);
break;
case 138:this.$ = $$[$0];
break;
case 139:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([].concat($$[$0-2], $$[$0]));
break;
case 140:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Try($$[$0]));
break;
case 141:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]));
break;
case 142:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Try($$[$0-2], null, null, $$[$0]));
break;
case 143:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]));
break;
case 144:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-1], $$[$0]]);
break;
case 145:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Value($$[$0-1])), $$[$0]]);
break;
case 146:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([null, $$[$0]]);
break;
case 147:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0]));
break;
case 148:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1]));
break;
case 149:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2]));
break;
case 150:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0]));
break;
case 151:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
          guard: $$[$0]
        }));
break;
case 152:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], {
          invert: true
        }));
break;
case 153:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
          invert: true,
          guard: $$[$0]
        }));
break;
case 154:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0]));
break;
case 155:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
break;
case 156:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
break;
case 157:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]);
break;
case 158:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody($$[$0]));
break;
case 159:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]]))));
break;
case 160:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
break;
case 161:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
break;
case 162:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1]));
break;
case 163:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
          source: yy.addLocationDataFn(_$[$0])(new yy.Value($$[$0]))
        });
break;
case 164:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () {
        $$[$0].own = $$[$0-1].own;
        $$[$0].name = $$[$0-1][0];
        $$[$0].index = $$[$0-1][1];
        return $$[$0];
      }()));
break;
case 165:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]);
break;
case 166:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
        $$[$0].own = true;
        return $$[$0];
      }()));
break;
case 167:this.$ = $$[$0];
break;
case 168:this.$ = $$[$0];
break;
case 169:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
break;
case 170:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
break;
case 171:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
break;
case 172:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]);
break;
case 173:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
          source: $$[$0]
        });
break;
case 174:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
          source: $$[$0],
          object: true
        });
break;
case 175:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
          source: $$[$0-2],
          guard: $$[$0]
        });
break;
case 176:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
          source: $$[$0-2],
          guard: $$[$0],
          object: true
        });
break;
case 177:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
          source: $$[$0-2],
          step: $$[$0]
        });
break;
case 178:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
          source: $$[$0-4],
          guard: $$[$0-2],
          step: $$[$0]
        });
break;
case 179:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
          source: $$[$0-4],
          step: $$[$0-2],
          guard: $$[$0]
        });
break;
case 180:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1]));
break;
case 181:this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]));
break;
case 182:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1]));
break;
case 183:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1]));
break;
case 184:this.$ = $$[$0];
break;
case 185:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0]));
break;
case 186:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]);
break;
case 187:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]);
break;
case 188:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {
          type: $$[$0-2]
        }));
break;
case 189:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {
          type: $$[$0-2]
        }))));
break;
case 190:this.$ = $$[$0];
break;
case 191:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0]));
break;
case 192:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
          type: $$[$0-1],
          statement: true
        }));
break;
case 193:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
          type: $$[$0-1],
          statement: true
        }));
break;
case 194:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0]));
break;
case 195:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0]));
break;
case 196:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('-', $$[$0]));
break;
case 197:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('+', $$[$0]));
break;
case 198:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0]));
break;
case 199:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0]));
break;
case 200:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0-1], null, true));
break;
case 201:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0-1], null, true));
break;
case 202:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1]));
break;
case 203:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('+', $$[$0-2], $$[$0]));
break;
case 204:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('-', $$[$0-2], $$[$0]));
break;
case 205:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
break;
case 206:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
break;
case 207:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
break;
case 208:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
break;
case 209:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
break;
case 210:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
        if ($$[$0-1].charAt(0) === '!') {
          return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert();
        } else {
          return new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
        }
      }()));
break;
case 211:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1]));
break;
case 212:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]));
break;
case 213:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2]));
break;
case 214:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0]));
break;
}
},
table: [{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[3]},{1:[2,2],6:[1,77]},{1:[2,3],6:[2,3],29:[2,3],106:[2,3]},{1:[2,6],6:[2,6],29:[2,6],106:[2,6],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,7],6:[2,7],29:[2,7],106:[2,7],107:91,108:[1,68],110:[1,69],113:92,114:[1,71],115:72,130:[1,90]},{1:[2,14],6:[2,14],28:[2,14],29:[2,14],52:[2,14],57:[2,14],60:[2,14],65:94,69:[1,96],70:[1,97],71:[1,98],72:[1,99],73:100,74:[1,101],76:[2,14],77:[1,102],81:[2,14],84:93,88:[1,95],89:[2,114],90:[2,14],95:[2,14],97:[2,14],106:[2,14],108:[2,14],109:[2,14],110:[2,14],114:[2,14],122:[2,14],130:[2,14],133:[2,14],134:[2,14],137:[2,14],138:[2,14],139:[2,14],140:[2,14],141:[2,14],142:[2,14],143:[2,14]},{1:[2,15],6:[2,15],28:[2,15],29:[2,15],52:[2,15],57:[2,15],60:[2,15],65:104,69:[1,96],70:[1,97],71:[1,98],72:[1,99],73:100,74:[1,101],76:[2,15],77:[1,102],81:[2,15],84:103,88:[1,95],89:[2,114],90:[2,15],95:[2,15],97:[2,15],106:[2,15],108:[2,15],109:[2,15],110:[2,15],114:[2,15],122:[2,15],130:[2,15],133:[2,15],134:[2,15],137:[2,15],138:[2,15],139:[2,15],140:[2,15],141:[2,15],142:[2,15],143:[2,15]},{1:[2,16],6:[2,16],28:[2,16],29:[2,16],52:[2,16],57:[2,16],60:[2,16],76:[2,16],81:[2,16],90:[2,16],95:[2,16],97:[2,16],106:[2,16],108:[2,16],109:[2,16],110:[2,16],114:[2,16],122:[2,16],130:[2,16],133:[2,16],134:[2,16],137:[2,16],138:[2,16],139:[2,16],140:[2,16],141:[2,16],142:[2,16],143:[2,16]},{1:[2,17],6:[2,17],28:[2,17],29:[2,17],52:[2,17],57:[2,17],60:[2,17],76:[2,17],81:[2,17],90:[2,17],95:[2,17],97:[2,17],106:[2,17],108:[2,17],109:[2,17],110:[2,17],114:[2,17],122:[2,17],130:[2,17],133:[2,17],134:[2,17],137:[2,17],138:[2,17],139:[2,17],140:[2,17],141:[2,17],142:[2,17],143:[2,17]},{1:[2,18],6:[2,18],28:[2,18],29:[2,18],52:[2,18],57:[2,18],60:[2,18],76:[2,18],81:[2,18],90:[2,18],95:[2,18],97:[2,18],106:[2,18],108:[2,18],109:[2,18],110:[2,18],114:[2,18],122:[2,18],130:[2,18],133:[2,18],134:[2,18],137:[2,18],138:[2,18],139:[2,18],140:[2,18],141:[2,18],142:[2,18],143:[2,18]},{1:[2,19],6:[2,19],28:[2,19],29:[2,19],52:[2,19],57:[2,19],60:[2,19],76:[2,19],81:[2,19],90:[2,19],95:[2,19],97:[2,19],106:[2,19],108:[2,19],109:[2,19],110:[2,19],114:[2,19],122:[2,19],130:[2,19],133:[2,19],134:[2,19],137:[2,19],138:[2,19],139:[2,19],140:[2,19],141:[2,19],142:[2,19],143:[2,19]},{1:[2,20],6:[2,20],28:[2,20],29:[2,20],52:[2,20],57:[2,20],60:[2,20],76:[2,20],81:[2,20],90:[2,20],95:[2,20],97:[2,20],106:[2,20],108:[2,20],109:[2,20],110:[2,20],114:[2,20],122:[2,20],130:[2,20],133:[2,20],134:[2,20],137:[2,20],138:[2,20],139:[2,20],140:[2,20],141:[2,20],142:[2,20],143:[2,20]},{1:[2,21],6:[2,21],28:[2,21],29:[2,21],52:[2,21],57:[2,21],60:[2,21],76:[2,21],81:[2,21],90:[2,21],95:[2,21],97:[2,21],106:[2,21],108:[2,21],109:[2,21],110:[2,21],114:[2,21],122:[2,21],130:[2,21],133:[2,21],134:[2,21],137:[2,21],138:[2,21],139:[2,21],140:[2,21],141:[2,21],142:[2,21],143:[2,21]},{1:[2,22],6:[2,22],28:[2,22],29:[2,22],52:[2,22],57:[2,22],60:[2,22],76:[2,22],81:[2,22],90:[2,22],95:[2,22],97:[2,22],106:[2,22],108:[2,22],109:[2,22],110:[2,22],114:[2,22],122:[2,22],130:[2,22],133:[2,22],134:[2,22],137:[2,22],138:[2,22],139:[2,22],140:[2,22],141:[2,22],142:[2,22],143:[2,22]},{1:[2,23],6:[2,23],28:[2,23],29:[2,23],52:[2,23],57:[2,23],60:[2,23],76:[2,23],81:[2,23],90:[2,23],95:[2,23],97:[2,23],106:[2,23],108:[2,23],109:[2,23],110:[2,23],114:[2,23],122:[2,23],130:[2,23],133:[2,23],134:[2,23],137:[2,23],138:[2,23],139:[2,23],140:[2,23],141:[2,23],142:[2,23],143:[2,23]},{1:[2,24],6:[2,24],28:[2,24],29:[2,24],52:[2,24],57:[2,24],60:[2,24],76:[2,24],81:[2,24],90:[2,24],95:[2,24],97:[2,24],106:[2,24],108:[2,24],109:[2,24],110:[2,24],114:[2,24],122:[2,24],130:[2,24],133:[2,24],134:[2,24],137:[2,24],138:[2,24],139:[2,24],140:[2,24],141:[2,24],142:[2,24],143:[2,24]},{1:[2,25],6:[2,25],28:[2,25],29:[2,25],52:[2,25],57:[2,25],60:[2,25],76:[2,25],81:[2,25],90:[2,25],95:[2,25],97:[2,25],106:[2,25],108:[2,25],109:[2,25],110:[2,25],114:[2,25],122:[2,25],130:[2,25],133:[2,25],134:[2,25],137:[2,25],138:[2,25],139:[2,25],140:[2,25],141:[2,25],142:[2,25],143:[2,25]},{1:[2,26],6:[2,26],28:[2,26],29:[2,26],52:[2,26],57:[2,26],60:[2,26],76:[2,26],81:[2,26],90:[2,26],95:[2,26],97:[2,26],106:[2,26],108:[2,26],109:[2,26],110:[2,26],114:[2,26],122:[2,26],130:[2,26],133:[2,26],134:[2,26],137:[2,26],138:[2,26],139:[2,26],140:[2,26],141:[2,26],142:[2,26],143:[2,26]},{1:[2,8],6:[2,8],29:[2,8],106:[2,8],108:[2,8],110:[2,8],114:[2,8],130:[2,8]},{1:[2,9],6:[2,9],29:[2,9],106:[2,9],108:[2,9],110:[2,9],114:[2,9],130:[2,9]},{1:[2,10],6:[2,10],29:[2,10],106:[2,10],108:[2,10],110:[2,10],114:[2,10],130:[2,10]},{1:[2,11],6:[2,11],29:[2,11],106:[2,11],108:[2,11],110:[2,11],114:[2,11],130:[2,11]},{1:[2,79],6:[2,79],28:[2,79],29:[2,79],43:[1,105],52:[2,79],57:[2,79],60:[2,79],69:[2,79],70:[2,79],71:[2,79],72:[2,79],74:[2,79],76:[2,79],77:[2,79],81:[2,79],88:[2,79],89:[2,79],90:[2,79],95:[2,79],97:[2,79],106:[2,79],108:[2,79],109:[2,79],110:[2,79],114:[2,79],122:[2,79],130:[2,79],133:[2,79],134:[2,79],137:[2,79],138:[2,79],139:[2,79],140:[2,79],141:[2,79],142:[2,79],143:[2,79]},{1:[2,80],6:[2,80],28:[2,80],29:[2,80],52:[2,80],57:[2,80],60:[2,80],69:[2,80],70:[2,80],71:[2,80],72:[2,80],74:[2,80],76:[2,80],77:[2,80],81:[2,80],88:[2,80],89:[2,80],90:[2,80],95:[2,80],97:[2,80],106:[2,80],108:[2,80],109:[2,80],110:[2,80],114:[2,80],122:[2,80],130:[2,80],133:[2,80],134:[2,80],137:[2,80],138:[2,80],139:[2,80],140:[2,80],141:[2,80],142:[2,80],143:[2,80]},{1:[2,81],6:[2,81],28:[2,81],29:[2,81],52:[2,81],57:[2,81],60:[2,81],69:[2,81],70:[2,81],71:[2,81],72:[2,81],74:[2,81],76:[2,81],77:[2,81],81:[2,81],88:[2,81],89:[2,81],90:[2,81],95:[2,81],97:[2,81],106:[2,81],108:[2,81],109:[2,81],110:[2,81],114:[2,81],122:[2,81],130:[2,81],133:[2,81],134:[2,81],137:[2,81],138:[2,81],139:[2,81],140:[2,81],141:[2,81],142:[2,81],143:[2,81]},{1:[2,82],6:[2,82],28:[2,82],29:[2,82],52:[2,82],57:[2,82],60:[2,82],69:[2,82],70:[2,82],71:[2,82],72:[2,82],74:[2,82],76:[2,82],77:[2,82],81:[2,82],88:[2,82],89:[2,82],90:[2,82],95:[2,82],97:[2,82],106:[2,82],108:[2,82],109:[2,82],110:[2,82],114:[2,82],122:[2,82],130:[2,82],133:[2,82],134:[2,82],137:[2,82],138:[2,82],139:[2,82],140:[2,82],141:[2,82],142:[2,82],143:[2,82]},{1:[2,83],6:[2,83],28:[2,83],29:[2,83],52:[2,83],57:[2,83],60:[2,83],69:[2,83],70:[2,83],71:[2,83],72:[2,83],74:[2,83],76:[2,83],77:[2,83],81:[2,83],88:[2,83],89:[2,83],90:[2,83],95:[2,83],97:[2,83],106:[2,83],108:[2,83],109:[2,83],110:[2,83],114:[2,83],122:[2,83],130:[2,83],133:[2,83],134:[2,83],137:[2,83],138:[2,83],139:[2,83],140:[2,83],141:[2,83],142:[2,83],143:[2,83]},{1:[2,111],6:[2,111],28:[2,111],29:[2,111],52:[2,111],57:[2,111],60:[2,111],69:[2,111],70:[2,111],71:[2,111],72:[2,111],74:[2,111],76:[2,111],77:[2,111],81:[2,111],85:106,88:[2,111],89:[1,107],90:[2,111],95:[2,111],97:[2,111],106:[2,111],108:[2,111],109:[2,111],110:[2,111],114:[2,111],122:[2,111],130:[2,111],133:[2,111],134:[2,111],137:[2,111],138:[2,111],139:[2,111],140:[2,111],141:[2,111],142:[2,111],143:[2,111]},{6:[2,58],28:[2,58],30:112,31:[1,76],47:113,51:108,52:[2,58],57:[2,58],58:109,59:110,60:[1,111],61:114,62:115,79:[1,73],93:[1,116],94:[1,117]},{14:118,28:[1,119]},{7:120,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:122,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:123,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:124,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{15:126,16:127,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:128,47:66,61:50,62:51,64:125,66:25,67:26,68:27,79:[1,73],86:[1,28],92:[1,61],93:[1,62],94:[1,60],105:[1,59]},{15:126,16:127,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:128,47:66,61:50,62:51,64:129,66:25,67:26,68:27,79:[1,73],86:[1,28],92:[1,61],93:[1,62],94:[1,60],105:[1,59]},{1:[2,76],6:[2,76],28:[2,76],29:[2,76],43:[2,76],52:[2,76],57:[2,76],60:[2,76],69:[2,76],70:[2,76],71:[2,76],72:[2,76],74:[2,76],76:[2,76],77:[2,76],81:[2,76],83:[1,133],88:[2,76],89:[2,76],90:[2,76],95:[2,76],97:[2,76],106:[2,76],108:[2,76],109:[2,76],110:[2,76],114:[2,76],122:[2,76],130:[2,76],133:[2,76],134:[2,76],135:[1,130],136:[1,131],137:[2,76],138:[2,76],139:[2,76],140:[2,76],141:[2,76],142:[2,76],143:[2,76],144:[1,132]},{1:[2,190],6:[2,190],28:[2,190],29:[2,190],52:[2,190],57:[2,190],60:[2,190],76:[2,190],81:[2,190],90:[2,190],95:[2,190],97:[2,190],106:[2,190],108:[2,190],109:[2,190],110:[2,190],114:[2,190],122:[2,190],125:[1,134],130:[2,190],133:[2,190],134:[2,190],137:[2,190],138:[2,190],139:[2,190],140:[2,190],141:[2,190],142:[2,190],143:[2,190]},{14:135,28:[1,119]},{14:136,28:[1,119]},{1:[2,157],6:[2,157],28:[2,157],29:[2,157],52:[2,157],57:[2,157],60:[2,157],76:[2,157],81:[2,157],90:[2,157],95:[2,157],97:[2,157],106:[2,157],108:[2,157],109:[2,157],110:[2,157],114:[2,157],122:[2,157],130:[2,157],133:[2,157],134:[2,157],137:[2,157],138:[2,157],139:[2,157],140:[2,157],141:[2,157],142:[2,157],143:[2,157]},{14:137,28:[1,119]},{7:138,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,139],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,101],6:[2,101],14:140,15:126,16:127,28:[1,119],29:[2,101],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:128,47:66,52:[2,101],57:[2,101],60:[2,101],61:50,62:51,64:142,66:25,67:26,68:27,76:[2,101],79:[1,73],81:[2,101],83:[1,141],86:[1,28],90:[2,101],92:[1,61],93:[1,62],94:[1,60],95:[2,101],97:[2,101],105:[1,59],106:[2,101],108:[2,101],109:[2,101],110:[2,101],114:[2,101],122:[2,101],130:[2,101],133:[2,101],134:[2,101],137:[2,101],138:[2,101],139:[2,101],140:[2,101],141:[2,101],142:[2,101],143:[2,101]},{7:143,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{85:144,89:[1,107]},{1:[2,50],6:[2,50],7:145,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,29:[2,50],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],106:[2,50],107:40,108:[2,50],110:[2,50],111:41,112:[1,70],113:42,114:[2,50],115:72,123:[1,43],128:38,129:[1,67],130:[2,50],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,51],6:[2,51],28:[2,51],29:[2,51],57:[2,51],81:[2,51],106:[2,51],108:[2,51],110:[2,51],114:[2,51],130:[2,51]},{7:147,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],14:146,15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,119],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,77],6:[2,77],28:[2,77],29:[2,77],43:[2,77],52:[2,77],57:[2,77],60:[2,77],69:[2,77],70:[2,77],71:[2,77],72:[2,77],74:[2,77],76:[2,77],77:[2,77],81:[2,77],88:[2,77],89:[2,77],90:[2,77],95:[2,77],97:[2,77],106:[2,77],108:[2,77],109:[2,77],110:[2,77],114:[2,77],122:[2,77],130:[2,77],133:[2,77],134:[2,77],137:[2,77],138:[2,77],139:[2,77],140:[2,77],141:[2,77],142:[2,77],143:[2,77]},{1:[2,78],6:[2,78],28:[2,78],29:[2,78],43:[2,78],52:[2,78],57:[2,78],60:[2,78],69:[2,78],70:[2,78],71:[2,78],72:[2,78],74:[2,78],76:[2,78],77:[2,78],81:[2,78],88:[2,78],89:[2,78],90:[2,78],95:[2,78],97:[2,78],106:[2,78],108:[2,78],109:[2,78],110:[2,78],114:[2,78],122:[2,78],130:[2,78],133:[2,78],134:[2,78],137:[2,78],138:[2,78],139:[2,78],140:[2,78],141:[2,78],142:[2,78],143:[2,78]},{1:[2,32],6:[2,32],28:[2,32],29:[2,32],52:[2,32],57:[2,32],60:[2,32],69:[2,32],70:[2,32],71:[2,32],72:[2,32],74:[2,32],76:[2,32],77:[2,32],81:[2,32],88:[2,32],89:[2,32],90:[2,32],95:[2,32],97:[2,32],106:[2,32],108:[2,32],109:[2,32],110:[2,32],114:[2,32],122:[2,32],130:[2,32],133:[2,32],134:[2,32],137:[2,32],138:[2,32],139:[2,32],140:[2,32],141:[2,32],142:[2,32],143:[2,32]},{1:[2,33],6:[2,33],28:[2,33],29:[2,33],52:[2,33],57:[2,33],60:[2,33],69:[2,33],70:[2,33],71:[2,33],72:[2,33],74:[2,33],76:[2,33],77:[2,33],81:[2,33],88:[2,33],89:[2,33],90:[2,33],95:[2,33],97:[2,33],106:[2,33],108:[2,33],109:[2,33],110:[2,33],114:[2,33],122:[2,33],130:[2,33],133:[2,33],134:[2,33],137:[2,33],138:[2,33],139:[2,33],140:[2,33],141:[2,33],142:[2,33],143:[2,33]},{1:[2,34],6:[2,34],28:[2,34],29:[2,34],52:[2,34],57:[2,34],60:[2,34],69:[2,34],70:[2,34],71:[2,34],72:[2,34],74:[2,34],76:[2,34],77:[2,34],81:[2,34],88:[2,34],89:[2,34],90:[2,34],95:[2,34],97:[2,34],106:[2,34],108:[2,34],109:[2,34],110:[2,34],114:[2,34],122:[2,34],130:[2,34],133:[2,34],134:[2,34],137:[2,34],138:[2,34],139:[2,34],140:[2,34],141:[2,34],142:[2,34],143:[2,34]},{1:[2,35],6:[2,35],28:[2,35],29:[2,35],52:[2,35],57:[2,35],60:[2,35],69:[2,35],70:[2,35],71:[2,35],72:[2,35],74:[2,35],76:[2,35],77:[2,35],81:[2,35],88:[2,35],89:[2,35],90:[2,35],95:[2,35],97:[2,35],106:[2,35],108:[2,35],109:[2,35],110:[2,35],114:[2,35],122:[2,35],130:[2,35],133:[2,35],134:[2,35],137:[2,35],138:[2,35],139:[2,35],140:[2,35],141:[2,35],142:[2,35],143:[2,35]},{1:[2,36],6:[2,36],28:[2,36],29:[2,36],52:[2,36],57:[2,36],60:[2,36],69:[2,36],70:[2,36],71:[2,36],72:[2,36],74:[2,36],76:[2,36],77:[2,36],81:[2,36],88:[2,36],89:[2,36],90:[2,36],95:[2,36],97:[2,36],106:[2,36],108:[2,36],109:[2,36],110:[2,36],114:[2,36],122:[2,36],130:[2,36],133:[2,36],134:[2,36],137:[2,36],138:[2,36],139:[2,36],140:[2,36],141:[2,36],142:[2,36],143:[2,36]},{1:[2,37],6:[2,37],28:[2,37],29:[2,37],52:[2,37],57:[2,37],60:[2,37],69:[2,37],70:[2,37],71:[2,37],72:[2,37],74:[2,37],76:[2,37],77:[2,37],81:[2,37],88:[2,37],89:[2,37],90:[2,37],95:[2,37],97:[2,37],106:[2,37],108:[2,37],109:[2,37],110:[2,37],114:[2,37],122:[2,37],130:[2,37],133:[2,37],134:[2,37],137:[2,37],138:[2,37],139:[2,37],140:[2,37],141:[2,37],142:[2,37],143:[2,37]},{1:[2,38],6:[2,38],28:[2,38],29:[2,38],52:[2,38],57:[2,38],60:[2,38],69:[2,38],70:[2,38],71:[2,38],72:[2,38],74:[2,38],76:[2,38],77:[2,38],81:[2,38],88:[2,38],89:[2,38],90:[2,38],95:[2,38],97:[2,38],106:[2,38],108:[2,38],109:[2,38],110:[2,38],114:[2,38],122:[2,38],130:[2,38],133:[2,38],134:[2,38],137:[2,38],138:[2,38],139:[2,38],140:[2,38],141:[2,38],142:[2,38],143:[2,38]},{4:148,5:3,7:4,8:5,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,149],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:150,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,154],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],91:152,92:[1,61],93:[1,62],94:[1,60],95:[1,151],98:153,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,118],6:[2,118],28:[2,118],29:[2,118],52:[2,118],57:[2,118],60:[2,118],69:[2,118],70:[2,118],71:[2,118],72:[2,118],74:[2,118],76:[2,118],77:[2,118],81:[2,118],88:[2,118],89:[2,118],90:[2,118],95:[2,118],97:[2,118],106:[2,118],108:[2,118],109:[2,118],110:[2,118],114:[2,118],122:[2,118],130:[2,118],133:[2,118],134:[2,118],137:[2,118],138:[2,118],139:[2,118],140:[2,118],141:[2,118],142:[2,118],143:[2,118]},{1:[2,119],6:[2,119],28:[2,119],29:[2,119],30:157,31:[1,76],52:[2,119],57:[2,119],60:[2,119],69:[2,119],70:[2,119],71:[2,119],72:[2,119],74:[2,119],76:[2,119],77:[2,119],81:[2,119],88:[2,119],89:[2,119],90:[2,119],95:[2,119],97:[2,119],106:[2,119],108:[2,119],109:[2,119],110:[2,119],114:[2,119],122:[2,119],130:[2,119],133:[2,119],134:[2,119],137:[2,119],138:[2,119],139:[2,119],140:[2,119],141:[2,119],142:[2,119],143:[2,119]},{28:[2,54]},{28:[2,55]},{1:[2,72],6:[2,72],28:[2,72],29:[2,72],43:[2,72],52:[2,72],57:[2,72],60:[2,72],69:[2,72],70:[2,72],71:[2,72],72:[2,72],74:[2,72],76:[2,72],77:[2,72],81:[2,72],83:[2,72],88:[2,72],89:[2,72],90:[2,72],95:[2,72],97:[2,72],106:[2,72],108:[2,72],109:[2,72],110:[2,72],114:[2,72],122:[2,72],130:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72],138:[2,72],139:[2,72],140:[2,72],141:[2,72],142:[2,72],143:[2,72],144:[2,72]},{1:[2,75],6:[2,75],28:[2,75],29:[2,75],43:[2,75],52:[2,75],57:[2,75],60:[2,75],69:[2,75],70:[2,75],71:[2,75],72:[2,75],74:[2,75],76:[2,75],77:[2,75],81:[2,75],83:[2,75],88:[2,75],89:[2,75],90:[2,75],95:[2,75],97:[2,75],106:[2,75],108:[2,75],109:[2,75],110:[2,75],114:[2,75],122:[2,75],130:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75],138:[2,75],139:[2,75],140:[2,75],141:[2,75],142:[2,75],143:[2,75],144:[2,75]},{7:158,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:159,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:160,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:162,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],14:161,15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,119],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{30:167,31:[1,76],47:168,61:169,62:170,67:163,79:[1,73],93:[1,116],94:[1,60],117:164,118:[1,165],119:166},{116:171,120:[1,172],121:[1,173]},{6:[2,96],10:177,28:[2,96],30:178,31:[1,76],32:179,33:[1,74],34:[1,75],44:175,45:176,47:180,49:[1,48],57:[2,96],80:174,81:[2,96],93:[1,116]},{1:[2,30],6:[2,30],28:[2,30],29:[2,30],46:[2,30],52:[2,30],57:[2,30],60:[2,30],69:[2,30],70:[2,30],71:[2,30],72:[2,30],74:[2,30],76:[2,30],77:[2,30],81:[2,30],88:[2,30],89:[2,30],90:[2,30],95:[2,30],97:[2,30],106:[2,30],108:[2,30],109:[2,30],110:[2,30],114:[2,30],122:[2,30],130:[2,30],133:[2,30],134:[2,30],137:[2,30],138:[2,30],139:[2,30],140:[2,30],141:[2,30],142:[2,30],143:[2,30]},{1:[2,31],6:[2,31],28:[2,31],29:[2,31],46:[2,31],52:[2,31],57:[2,31],60:[2,31],69:[2,31],70:[2,31],71:[2,31],72:[2,31],74:[2,31],76:[2,31],77:[2,31],81:[2,31],88:[2,31],89:[2,31],90:[2,31],95:[2,31],97:[2,31],106:[2,31],108:[2,31],109:[2,31],110:[2,31],114:[2,31],122:[2,31],130:[2,31],133:[2,31],134:[2,31],137:[2,31],138:[2,31],139:[2,31],140:[2,31],141:[2,31],142:[2,31],143:[2,31]},{1:[2,29],6:[2,29],28:[2,29],29:[2,29],43:[2,29],46:[2,29],52:[2,29],57:[2,29],60:[2,29],69:[2,29],70:[2,29],71:[2,29],72:[2,29],74:[2,29],76:[2,29],77:[2,29],81:[2,29],83:[2,29],88:[2,29],89:[2,29],90:[2,29],95:[2,29],97:[2,29],106:[2,29],108:[2,29],109:[2,29],110:[2,29],114:[2,29],120:[2,29],121:[2,29],122:[2,29],130:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29],138:[2,29],139:[2,29],140:[2,29],141:[2,29],142:[2,29],143:[2,29],144:[2,29]},{1:[2,5],5:181,6:[2,5],7:4,8:5,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,29:[2,5],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],106:[2,5],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,202],6:[2,202],28:[2,202],29:[2,202],52:[2,202],57:[2,202],60:[2,202],76:[2,202],81:[2,202],90:[2,202],95:[2,202],97:[2,202],106:[2,202],108:[2,202],109:[2,202],110:[2,202],114:[2,202],122:[2,202],130:[2,202],133:[2,202],134:[2,202],137:[2,202],138:[2,202],139:[2,202],140:[2,202],141:[2,202],142:[2,202],143:[2,202]},{7:182,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:183,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:184,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:185,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:186,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:187,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:188,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:189,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:190,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,156],6:[2,156],28:[2,156],29:[2,156],52:[2,156],57:[2,156],60:[2,156],76:[2,156],81:[2,156],90:[2,156],95:[2,156],97:[2,156],106:[2,156],108:[2,156],109:[2,156],110:[2,156],114:[2,156],122:[2,156],130:[2,156],133:[2,156],134:[2,156],137:[2,156],138:[2,156],139:[2,156],140:[2,156],141:[2,156],142:[2,156],143:[2,156]},{1:[2,161],6:[2,161],28:[2,161],29:[2,161],52:[2,161],57:[2,161],60:[2,161],76:[2,161],81:[2,161],90:[2,161],95:[2,161],97:[2,161],106:[2,161],108:[2,161],109:[2,161],110:[2,161],114:[2,161],122:[2,161],130:[2,161],133:[2,161],134:[2,161],137:[2,161],138:[2,161],139:[2,161],140:[2,161],141:[2,161],142:[2,161],143:[2,161]},{7:191,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,155],6:[2,155],28:[2,155],29:[2,155],52:[2,155],57:[2,155],60:[2,155],76:[2,155],81:[2,155],90:[2,155],95:[2,155],97:[2,155],106:[2,155],108:[2,155],109:[2,155],110:[2,155],114:[2,155],122:[2,155],130:[2,155],133:[2,155],134:[2,155],137:[2,155],138:[2,155],139:[2,155],140:[2,155],141:[2,155],142:[2,155],143:[2,155]},{1:[2,160],6:[2,160],28:[2,160],29:[2,160],52:[2,160],57:[2,160],60:[2,160],76:[2,160],81:[2,160],90:[2,160],95:[2,160],97:[2,160],106:[2,160],108:[2,160],109:[2,160],110:[2,160],114:[2,160],122:[2,160],130:[2,160],133:[2,160],134:[2,160],137:[2,160],138:[2,160],139:[2,160],140:[2,160],141:[2,160],142:[2,160],143:[2,160]},{85:192,89:[1,107]},{1:[2,73],6:[2,73],28:[2,73],29:[2,73],43:[2,73],52:[2,73],57:[2,73],60:[2,73],69:[2,73],70:[2,73],71:[2,73],72:[2,73],74:[2,73],76:[2,73],77:[2,73],81:[2,73],83:[2,73],88:[2,73],89:[2,73],90:[2,73],95:[2,73],97:[2,73],106:[2,73],108:[2,73],109:[2,73],110:[2,73],114:[2,73],122:[2,73],130:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73],138:[2,73],139:[2,73],140:[2,73],141:[2,73],142:[2,73],143:[2,73],144:[2,73]},{89:[2,115]},{27:194,30:193,31:[1,76],87:[1,46]},{30:195,31:[1,76]},{1:[2,89],6:[2,89],28:[2,89],29:[2,89],30:196,31:[1,76],43:[2,89],52:[2,89],57:[2,89],60:[2,89],69:[2,89],70:[2,89],71:[2,89],72:[2,89],74:[2,89],76:[2,89],77:[2,89],81:[2,89],83:[2,89],88:[2,89],89:[2,89],90:[2,89],95:[2,89],97:[2,89],106:[2,89],108:[2,89],109:[2,89],110:[2,89],114:[2,89],122:[2,89],130:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89],137:[2,89],138:[2,89],139:[2,89],140:[2,89],141:[2,89],142:[2,89],143:[2,89],144:[2,89]},{30:197,31:[1,76]},{1:[2,90],6:[2,90],28:[2,90],29:[2,90],43:[2,90],52:[2,90],57:[2,90],60:[2,90],69:[2,90],70:[2,90],71:[2,90],72:[2,90],74:[2,90],76:[2,90],77:[2,90],81:[2,90],83:[2,90],88:[2,90],89:[2,90],90:[2,90],95:[2,90],97:[2,90],106:[2,90],108:[2,90],109:[2,90],110:[2,90],114:[2,90],122:[2,90],130:[2,90],133:[2,90],134:[2,90],135:[2,90],136:[2,90],137:[2,90],138:[2,90],139:[2,90],140:[2,90],141:[2,90],142:[2,90],143:[2,90],144:[2,90]},{7:199,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,203],61:50,62:51,64:37,66:25,67:26,68:27,75:198,78:200,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],96:201,97:[1,202],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{73:204,74:[1,101],77:[1,102]},{85:205,89:[1,107]},{1:[2,74],6:[2,74],28:[2,74],29:[2,74],43:[2,74],52:[2,74],57:[2,74],60:[2,74],69:[2,74],70:[2,74],71:[2,74],72:[2,74],74:[2,74],76:[2,74],77:[2,74],81:[2,74],83:[2,74],88:[2,74],89:[2,74],90:[2,74],95:[2,74],97:[2,74],106:[2,74],108:[2,74],109:[2,74],110:[2,74],114:[2,74],122:[2,74],130:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74],138:[2,74],139:[2,74],140:[2,74],141:[2,74],142:[2,74],143:[2,74],144:[2,74]},{6:[1,207],7:206,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,208],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,112],6:[2,112],28:[2,112],29:[2,112],52:[2,112],57:[2,112],60:[2,112],69:[2,112],70:[2,112],71:[2,112],72:[2,112],74:[2,112],76:[2,112],77:[2,112],81:[2,112],88:[2,112],89:[2,112],90:[2,112],95:[2,112],97:[2,112],106:[2,112],108:[2,112],109:[2,112],110:[2,112],114:[2,112],122:[2,112],130:[2,112],133:[2,112],134:[2,112],137:[2,112],138:[2,112],139:[2,112],140:[2,112],141:[2,112],142:[2,112],143:[2,112]},{7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,154],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],90:[1,209],91:210,92:[1,61],93:[1,62],94:[1,60],98:153,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,56],28:[2,56],52:[1,212],56:214,57:[1,213]},{6:[2,59],28:[2,59],29:[2,59],52:[2,59],57:[2,59]},{6:[2,63],28:[2,63],29:[2,63],43:[1,216],52:[2,63],57:[2,63],60:[1,215]},{6:[2,66],28:[2,66],29:[2,66],52:[2,66],57:[2,66]},{6:[2,67],28:[2,67],29:[2,67],43:[2,67],52:[2,67],57:[2,67],60:[2,67]},{6:[2,68],28:[2,68],29:[2,68],43:[2,68],52:[2,68],57:[2,68],60:[2,68]},{6:[2,69],28:[2,69],29:[2,69],43:[2,69],52:[2,69],57:[2,69],60:[2,69]},{6:[2,70],28:[2,70],29:[2,70],43:[2,70],52:[2,70],57:[2,70],60:[2,70]},{30:157,31:[1,76]},{7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,154],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],91:152,92:[1,61],93:[1,62],94:[1,60],95:[1,151],98:153,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,53],6:[2,53],28:[2,53],29:[2,53],52:[2,53],57:[2,53],60:[2,53],76:[2,53],81:[2,53],90:[2,53],95:[2,53],97:[2,53],106:[2,53],108:[2,53],109:[2,53],110:[2,53],114:[2,53],122:[2,53],130:[2,53],133:[2,53],134:[2,53],137:[2,53],138:[2,53],139:[2,53],140:[2,53],141:[2,53],142:[2,53],143:[2,53]},{4:218,5:3,7:4,8:5,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,29:[1,217],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,194],6:[2,194],28:[2,194],29:[2,194],52:[2,194],57:[2,194],60:[2,194],76:[2,194],81:[2,194],90:[2,194],95:[2,194],97:[2,194],106:[2,194],107:88,108:[2,194],109:[2,194],110:[2,194],113:89,114:[2,194],115:72,122:[2,194],130:[2,194],133:[2,194],134:[2,194],137:[1,78],138:[2,194],139:[2,194],140:[2,194],141:[2,194],142:[2,194],143:[2,194]},{107:91,108:[1,68],110:[1,69],113:92,114:[1,71],115:72,130:[1,90]},{1:[2,195],6:[2,195],28:[2,195],29:[2,195],52:[2,195],57:[2,195],60:[2,195],76:[2,195],81:[2,195],90:[2,195],95:[2,195],97:[2,195],106:[2,195],107:88,108:[2,195],109:[2,195],110:[2,195],113:89,114:[2,195],115:72,122:[2,195],130:[2,195],133:[2,195],134:[2,195],137:[1,78],138:[2,195],139:[1,82],140:[2,195],141:[2,195],142:[2,195],143:[2,195]},{1:[2,196],6:[2,196],28:[2,196],29:[2,196],52:[2,196],57:[2,196],60:[2,196],76:[2,196],81:[2,196],90:[2,196],95:[2,196],97:[2,196],106:[2,196],107:88,108:[2,196],109:[2,196],110:[2,196],113:89,114:[2,196],115:72,122:[2,196],130:[2,196],133:[2,196],134:[2,196],137:[1,78],138:[2,196],139:[1,82],140:[2,196],141:[2,196],142:[2,196],143:[2,196]},{1:[2,197],6:[2,197],28:[2,197],29:[2,197],52:[2,197],57:[2,197],60:[2,197],76:[2,197],81:[2,197],90:[2,197],95:[2,197],97:[2,197],106:[2,197],107:88,108:[2,197],109:[2,197],110:[2,197],113:89,114:[2,197],115:72,122:[2,197],130:[2,197],133:[2,197],134:[2,197],137:[1,78],138:[2,197],139:[1,82],140:[2,197],141:[2,197],142:[2,197],143:[2,197]},{1:[2,198],6:[2,198],28:[2,198],29:[2,198],52:[2,198],57:[2,198],60:[2,198],69:[2,76],70:[2,76],71:[2,76],72:[2,76],74:[2,76],76:[2,198],77:[2,76],81:[2,198],88:[2,76],89:[2,76],90:[2,198],95:[2,198],97:[2,198],106:[2,198],108:[2,198],109:[2,198],110:[2,198],114:[2,198],122:[2,198],130:[2,198],133:[2,198],134:[2,198],137:[2,198],138:[2,198],139:[2,198],140:[2,198],141:[2,198],142:[2,198],143:[2,198]},{65:94,69:[1,96],70:[1,97],71:[1,98],72:[1,99],73:100,74:[1,101],77:[1,102],84:93,88:[1,95],89:[2,114]},{65:104,69:[1,96],70:[1,97],71:[1,98],72:[1,99],73:100,74:[1,101],77:[1,102],84:103,88:[1,95],89:[2,114]},{69:[2,79],70:[2,79],71:[2,79],72:[2,79],74:[2,79],77:[2,79],88:[2,79],89:[2,79]},{1:[2,199],6:[2,199],28:[2,199],29:[2,199],52:[2,199],57:[2,199],60:[2,199],69:[2,76],70:[2,76],71:[2,76],72:[2,76],74:[2,76],76:[2,199],77:[2,76],81:[2,199],88:[2,76],89:[2,76],90:[2,199],95:[2,199],97:[2,199],106:[2,199],108:[2,199],109:[2,199],110:[2,199],114:[2,199],122:[2,199],130:[2,199],133:[2,199],134:[2,199],137:[2,199],138:[2,199],139:[2,199],140:[2,199],141:[2,199],142:[2,199],143:[2,199]},{1:[2,200],6:[2,200],28:[2,200],29:[2,200],52:[2,200],57:[2,200],60:[2,200],76:[2,200],81:[2,200],90:[2,200],95:[2,200],97:[2,200],106:[2,200],108:[2,200],109:[2,200],110:[2,200],114:[2,200],122:[2,200],130:[2,200],133:[2,200],134:[2,200],137:[2,200],138:[2,200],139:[2,200],140:[2,200],141:[2,200],142:[2,200],143:[2,200]},{1:[2,201],6:[2,201],28:[2,201],29:[2,201],52:[2,201],57:[2,201],60:[2,201],76:[2,201],81:[2,201],90:[2,201],95:[2,201],97:[2,201],106:[2,201],108:[2,201],109:[2,201],110:[2,201],114:[2,201],122:[2,201],130:[2,201],133:[2,201],134:[2,201],137:[2,201],138:[2,201],139:[2,201],140:[2,201],141:[2,201],142:[2,201],143:[2,201]},{6:[1,221],7:219,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,220],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:222,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{14:223,28:[1,119],129:[1,224]},{1:[2,140],6:[2,140],28:[2,140],29:[2,140],52:[2,140],57:[2,140],60:[2,140],76:[2,140],81:[2,140],90:[2,140],95:[2,140],97:[2,140],101:225,102:[1,226],103:[1,227],106:[2,140],108:[2,140],109:[2,140],110:[2,140],114:[2,140],122:[2,140],130:[2,140],133:[2,140],134:[2,140],137:[2,140],138:[2,140],139:[2,140],140:[2,140],141:[2,140],142:[2,140],143:[2,140]},{1:[2,154],6:[2,154],28:[2,154],29:[2,154],52:[2,154],57:[2,154],60:[2,154],76:[2,154],81:[2,154],90:[2,154],95:[2,154],97:[2,154],106:[2,154],108:[2,154],109:[2,154],110:[2,154],114:[2,154],122:[2,154],130:[2,154],133:[2,154],134:[2,154],137:[2,154],138:[2,154],139:[2,154],140:[2,154],141:[2,154],142:[2,154],143:[2,154]},{1:[2,162],6:[2,162],28:[2,162],29:[2,162],52:[2,162],57:[2,162],60:[2,162],76:[2,162],81:[2,162],90:[2,162],95:[2,162],97:[2,162],106:[2,162],108:[2,162],109:[2,162],110:[2,162],114:[2,162],122:[2,162],130:[2,162],133:[2,162],134:[2,162],137:[2,162],138:[2,162],139:[2,162],140:[2,162],141:[2,162],142:[2,162],143:[2,162]},{28:[1,228],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{124:229,126:230,127:[1,231]},{1:[2,102],6:[2,102],28:[2,102],29:[2,102],52:[2,102],57:[2,102],60:[2,102],76:[2,102],81:[2,102],90:[2,102],95:[2,102],97:[2,102],106:[2,102],108:[2,102],109:[2,102],110:[2,102],114:[2,102],122:[2,102],130:[2,102],133:[2,102],134:[2,102],137:[2,102],138:[2,102],139:[2,102],140:[2,102],141:[2,102],142:[2,102],143:[2,102]},{7:232,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,105],6:[2,105],14:233,28:[1,119],29:[2,105],52:[2,105],57:[2,105],60:[2,105],69:[2,76],70:[2,76],71:[2,76],72:[2,76],74:[2,76],76:[2,105],77:[2,76],81:[2,105],83:[1,234],88:[2,76],89:[2,76],90:[2,105],95:[2,105],97:[2,105],106:[2,105],108:[2,105],109:[2,105],110:[2,105],114:[2,105],122:[2,105],130:[2,105],133:[2,105],134:[2,105],137:[2,105],138:[2,105],139:[2,105],140:[2,105],141:[2,105],142:[2,105],143:[2,105]},{1:[2,147],6:[2,147],28:[2,147],29:[2,147],52:[2,147],57:[2,147],60:[2,147],76:[2,147],81:[2,147],90:[2,147],95:[2,147],97:[2,147],106:[2,147],107:88,108:[2,147],109:[2,147],110:[2,147],113:89,114:[2,147],115:72,122:[2,147],130:[2,147],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,113],6:[2,113],28:[2,113],29:[2,113],43:[2,113],52:[2,113],57:[2,113],60:[2,113],69:[2,113],70:[2,113],71:[2,113],72:[2,113],74:[2,113],76:[2,113],77:[2,113],81:[2,113],83:[2,113],88:[2,113],89:[2,113],90:[2,113],95:[2,113],97:[2,113],106:[2,113],108:[2,113],109:[2,113],110:[2,113],114:[2,113],122:[2,113],130:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113],138:[2,113],139:[2,113],140:[2,113],141:[2,113],142:[2,113],143:[2,113],144:[2,113]},{1:[2,49],6:[2,49],29:[2,49],106:[2,49],107:88,108:[2,49],110:[2,49],113:89,114:[2,49],115:72,130:[2,49],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,12],6:[2,12],29:[2,12],106:[2,12],108:[2,12],110:[2,12],114:[2,12],130:[2,12]},{1:[2,13],6:[2,13],29:[2,13],106:[2,13],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[2,13],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[1,77],106:[1,235]},{4:236,5:3,7:4,8:5,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,135],28:[2,135],57:[2,135],60:[1,238],95:[2,135],96:237,97:[1,202],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,121],6:[2,121],28:[2,121],29:[2,121],43:[2,121],52:[2,121],57:[2,121],60:[2,121],69:[2,121],70:[2,121],71:[2,121],72:[2,121],74:[2,121],76:[2,121],77:[2,121],81:[2,121],88:[2,121],89:[2,121],90:[2,121],95:[2,121],97:[2,121],106:[2,121],108:[2,121],109:[2,121],110:[2,121],114:[2,121],120:[2,121],121:[2,121],122:[2,121],130:[2,121],133:[2,121],134:[2,121],137:[2,121],138:[2,121],139:[2,121],140:[2,121],141:[2,121],142:[2,121],143:[2,121]},{6:[2,56],28:[2,56],56:239,57:[1,240],95:[2,56]},{6:[2,130],28:[2,130],29:[2,130],57:[2,130],90:[2,130],95:[2,130]},{7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,154],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],91:241,92:[1,61],93:[1,62],94:[1,60],98:153,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,136],28:[2,136],29:[2,136],57:[2,136],90:[2,136],95:[2,136]},{6:[2,137],28:[2,137],29:[2,137],57:[2,137],90:[2,137],95:[2,137]},{1:[2,120],6:[2,120],28:[2,120],29:[2,120],43:[2,120],46:[2,120],52:[2,120],57:[2,120],60:[2,120],69:[2,120],70:[2,120],71:[2,120],72:[2,120],74:[2,120],76:[2,120],77:[2,120],81:[2,120],83:[2,120],88:[2,120],89:[2,120],90:[2,120],95:[2,120],97:[2,120],106:[2,120],108:[2,120],109:[2,120],110:[2,120],114:[2,120],120:[2,120],121:[2,120],122:[2,120],130:[2,120],133:[2,120],134:[2,120],135:[2,120],136:[2,120],137:[2,120],138:[2,120],139:[2,120],140:[2,120],141:[2,120],142:[2,120],143:[2,120],144:[2,120]},{14:242,28:[1,119],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,150],6:[2,150],28:[2,150],29:[2,150],52:[2,150],57:[2,150],60:[2,150],76:[2,150],81:[2,150],90:[2,150],95:[2,150],97:[2,150],106:[2,150],107:88,108:[1,68],109:[1,243],110:[1,69],113:89,114:[1,71],115:72,122:[2,150],130:[2,150],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,152],6:[2,152],28:[2,152],29:[2,152],52:[2,152],57:[2,152],60:[2,152],76:[2,152],81:[2,152],90:[2,152],95:[2,152],97:[2,152],106:[2,152],107:88,108:[1,68],109:[1,244],110:[1,69],113:89,114:[1,71],115:72,122:[2,152],130:[2,152],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,158],6:[2,158],28:[2,158],29:[2,158],52:[2,158],57:[2,158],60:[2,158],76:[2,158],81:[2,158],90:[2,158],95:[2,158],97:[2,158],106:[2,158],108:[2,158],109:[2,158],110:[2,158],114:[2,158],122:[2,158],130:[2,158],133:[2,158],134:[2,158],137:[2,158],138:[2,158],139:[2,158],140:[2,158],141:[2,158],142:[2,158],143:[2,158]},{1:[2,159],6:[2,159],28:[2,159],29:[2,159],52:[2,159],57:[2,159],60:[2,159],76:[2,159],81:[2,159],90:[2,159],95:[2,159],97:[2,159],106:[2,159],107:88,108:[1,68],109:[2,159],110:[1,69],113:89,114:[1,71],115:72,122:[2,159],130:[2,159],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,163],6:[2,163],28:[2,163],29:[2,163],52:[2,163],57:[2,163],60:[2,163],76:[2,163],81:[2,163],90:[2,163],95:[2,163],97:[2,163],106:[2,163],108:[2,163],109:[2,163],110:[2,163],114:[2,163],122:[2,163],130:[2,163],133:[2,163],134:[2,163],137:[2,163],138:[2,163],139:[2,163],140:[2,163],141:[2,163],142:[2,163],143:[2,163]},{120:[2,165],121:[2,165]},{30:167,31:[1,76],47:168,61:169,62:170,79:[1,73],93:[1,116],94:[1,117],117:245,119:166},{57:[1,246],120:[2,171],121:[2,171]},{57:[2,167],120:[2,167],121:[2,167]},{57:[2,168],120:[2,168],121:[2,168]},{57:[2,169],120:[2,169],121:[2,169]},{57:[2,170],120:[2,170],121:[2,170]},{1:[2,164],6:[2,164],28:[2,164],29:[2,164],52:[2,164],57:[2,164],60:[2,164],76:[2,164],81:[2,164],90:[2,164],95:[2,164],97:[2,164],106:[2,164],108:[2,164],109:[2,164],110:[2,164],114:[2,164],122:[2,164],130:[2,164],133:[2,164],134:[2,164],137:[2,164],138:[2,164],139:[2,164],140:[2,164],141:[2,164],142:[2,164],143:[2,164]},{7:247,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:248,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,56],28:[2,56],56:249,57:[1,250],81:[2,56]},{6:[2,97],28:[2,97],29:[2,97],57:[2,97],81:[2,97]},{6:[2,42],28:[2,42],29:[2,42],46:[1,251],57:[2,42],81:[2,42]},{6:[2,45],28:[2,45],29:[2,45],57:[2,45],81:[2,45]},{6:[2,46],28:[2,46],29:[2,46],46:[2,46],57:[2,46],81:[2,46]},{6:[2,47],28:[2,47],29:[2,47],46:[2,47],57:[2,47],81:[2,47]},{6:[2,48],28:[2,48],29:[2,48],46:[2,48],57:[2,48],81:[2,48]},{1:[2,4],6:[2,4],29:[2,4],106:[2,4]},{1:[2,203],6:[2,203],28:[2,203],29:[2,203],52:[2,203],57:[2,203],60:[2,203],76:[2,203],81:[2,203],90:[2,203],95:[2,203],97:[2,203],106:[2,203],107:88,108:[2,203],109:[2,203],110:[2,203],113:89,114:[2,203],115:72,122:[2,203],130:[2,203],133:[2,203],134:[2,203],137:[1,78],138:[1,81],139:[1,82],140:[2,203],141:[2,203],142:[2,203],143:[2,203]},{1:[2,204],6:[2,204],28:[2,204],29:[2,204],52:[2,204],57:[2,204],60:[2,204],76:[2,204],81:[2,204],90:[2,204],95:[2,204],97:[2,204],106:[2,204],107:88,108:[2,204],109:[2,204],110:[2,204],113:89,114:[2,204],115:72,122:[2,204],130:[2,204],133:[2,204],134:[2,204],137:[1,78],138:[1,81],139:[1,82],140:[2,204],141:[2,204],142:[2,204],143:[2,204]},{1:[2,205],6:[2,205],28:[2,205],29:[2,205],52:[2,205],57:[2,205],60:[2,205],76:[2,205],81:[2,205],90:[2,205],95:[2,205],97:[2,205],106:[2,205],107:88,108:[2,205],109:[2,205],110:[2,205],113:89,114:[2,205],115:72,122:[2,205],130:[2,205],133:[2,205],134:[2,205],137:[1,78],138:[2,205],139:[1,82],140:[2,205],141:[2,205],142:[2,205],143:[2,205]},{1:[2,206],6:[2,206],28:[2,206],29:[2,206],52:[2,206],57:[2,206],60:[2,206],76:[2,206],81:[2,206],90:[2,206],95:[2,206],97:[2,206],106:[2,206],107:88,108:[2,206],109:[2,206],110:[2,206],113:89,114:[2,206],115:72,122:[2,206],130:[2,206],133:[2,206],134:[2,206],137:[1,78],138:[2,206],139:[1,82],140:[2,206],141:[2,206],142:[2,206],143:[2,206]},{1:[2,207],6:[2,207],28:[2,207],29:[2,207],52:[2,207],57:[2,207],60:[2,207],76:[2,207],81:[2,207],90:[2,207],95:[2,207],97:[2,207],106:[2,207],107:88,108:[2,207],109:[2,207],110:[2,207],113:89,114:[2,207],115:72,122:[2,207],130:[2,207],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[2,207],141:[2,207],142:[2,207],143:[2,207]},{1:[2,208],6:[2,208],28:[2,208],29:[2,208],52:[2,208],57:[2,208],60:[2,208],76:[2,208],81:[2,208],90:[2,208],95:[2,208],97:[2,208],106:[2,208],107:88,108:[2,208],109:[2,208],110:[2,208],113:89,114:[2,208],115:72,122:[2,208],130:[2,208],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[2,208],142:[2,208],143:[1,86]},{1:[2,209],6:[2,209],28:[2,209],29:[2,209],52:[2,209],57:[2,209],60:[2,209],76:[2,209],81:[2,209],90:[2,209],95:[2,209],97:[2,209],106:[2,209],107:88,108:[2,209],109:[2,209],110:[2,209],113:89,114:[2,209],115:72,122:[2,209],130:[2,209],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[2,209],143:[1,86]},{1:[2,210],6:[2,210],28:[2,210],29:[2,210],52:[2,210],57:[2,210],60:[2,210],76:[2,210],81:[2,210],90:[2,210],95:[2,210],97:[2,210],106:[2,210],107:88,108:[2,210],109:[2,210],110:[2,210],113:89,114:[2,210],115:72,122:[2,210],130:[2,210],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[2,210],142:[2,210],143:[2,210]},{1:[2,193],6:[2,193],28:[2,193],29:[2,193],52:[2,193],57:[2,193],60:[2,193],76:[2,193],81:[2,193],90:[2,193],95:[2,193],97:[2,193],106:[2,193],107:88,108:[1,68],109:[2,193],110:[1,69],113:89,114:[1,71],115:72,122:[2,193],130:[2,193],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,192],6:[2,192],28:[2,192],29:[2,192],52:[2,192],57:[2,192],60:[2,192],76:[2,192],81:[2,192],90:[2,192],95:[2,192],97:[2,192],106:[2,192],107:88,108:[1,68],109:[2,192],110:[1,69],113:89,114:[1,71],115:72,122:[2,192],130:[2,192],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,109],6:[2,109],28:[2,109],29:[2,109],52:[2,109],57:[2,109],60:[2,109],69:[2,109],70:[2,109],71:[2,109],72:[2,109],74:[2,109],76:[2,109],77:[2,109],81:[2,109],88:[2,109],89:[2,109],90:[2,109],95:[2,109],97:[2,109],106:[2,109],108:[2,109],109:[2,109],110:[2,109],114:[2,109],122:[2,109],130:[2,109],133:[2,109],134:[2,109],137:[2,109],138:[2,109],139:[2,109],140:[2,109],141:[2,109],142:[2,109],143:[2,109]},{1:[2,84],6:[2,84],28:[2,84],29:[2,84],43:[2,84],52:[2,84],57:[2,84],60:[2,84],69:[2,84],70:[2,84],71:[2,84],72:[2,84],74:[2,84],76:[2,84],77:[2,84],81:[2,84],83:[2,84],88:[2,84],89:[2,84],90:[2,84],95:[2,84],97:[2,84],106:[2,84],108:[2,84],109:[2,84],110:[2,84],114:[2,84],122:[2,84],130:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84],139:[2,84],140:[2,84],141:[2,84],142:[2,84],143:[2,84],144:[2,84]},{1:[2,85],6:[2,85],28:[2,85],29:[2,85],43:[2,85],52:[2,85],57:[2,85],60:[2,85],69:[2,85],70:[2,85],71:[2,85],72:[2,85],74:[2,85],76:[2,85],77:[2,85],81:[2,85],83:[2,85],88:[2,85],89:[2,85],90:[2,85],95:[2,85],97:[2,85],106:[2,85],108:[2,85],109:[2,85],110:[2,85],114:[2,85],122:[2,85],130:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85],139:[2,85],140:[2,85],141:[2,85],142:[2,85],143:[2,85],144:[2,85]},{1:[2,86],6:[2,86],28:[2,86],29:[2,86],43:[2,86],52:[2,86],57:[2,86],60:[2,86],69:[2,86],70:[2,86],71:[2,86],72:[2,86],74:[2,86],76:[2,86],77:[2,86],81:[2,86],83:[2,86],88:[2,86],89:[2,86],90:[2,86],95:[2,86],97:[2,86],106:[2,86],108:[2,86],109:[2,86],110:[2,86],114:[2,86],122:[2,86],130:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86],139:[2,86],140:[2,86],141:[2,86],142:[2,86],143:[2,86],144:[2,86]},{1:[2,87],6:[2,87],28:[2,87],29:[2,87],43:[2,87],52:[2,87],57:[2,87],60:[2,87],69:[2,87],70:[2,87],71:[2,87],72:[2,87],74:[2,87],76:[2,87],77:[2,87],81:[2,87],83:[2,87],88:[2,87],89:[2,87],90:[2,87],95:[2,87],97:[2,87],106:[2,87],108:[2,87],109:[2,87],110:[2,87],114:[2,87],122:[2,87],130:[2,87],133:[2,87],134:[2,87],135:[2,87],136:[2,87],137:[2,87],138:[2,87],139:[2,87],140:[2,87],141:[2,87],142:[2,87],143:[2,87],144:[2,87]},{1:[2,88],6:[2,88],28:[2,88],29:[2,88],43:[2,88],52:[2,88],57:[2,88],60:[2,88],69:[2,88],70:[2,88],71:[2,88],72:[2,88],74:[2,88],76:[2,88],77:[2,88],81:[2,88],83:[2,88],88:[2,88],89:[2,88],90:[2,88],95:[2,88],97:[2,88],106:[2,88],108:[2,88],109:[2,88],110:[2,88],114:[2,88],122:[2,88],130:[2,88],133:[2,88],134:[2,88],135:[2,88],136:[2,88],137:[2,88],138:[2,88],139:[2,88],140:[2,88],141:[2,88],142:[2,88],143:[2,88],144:[2,88]},{76:[1,252]},{60:[1,203],76:[2,93],96:253,97:[1,202],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{76:[2,94]},{7:254,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,76:[2,129],79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{11:[2,123],13:[2,123],31:[2,123],33:[2,123],34:[2,123],36:[2,123],37:[2,123],38:[2,123],39:[2,123],40:[2,123],41:[2,123],48:[2,123],49:[2,123],50:[2,123],54:[2,123],55:[2,123],76:[2,123],79:[2,123],82:[2,123],86:[2,123],87:[2,123],92:[2,123],93:[2,123],94:[2,123],100:[2,123],104:[2,123],105:[2,123],108:[2,123],110:[2,123],112:[2,123],114:[2,123],123:[2,123],129:[2,123],131:[2,123],132:[2,123],133:[2,123],134:[2,123],135:[2,123],136:[2,123]},{11:[2,124],13:[2,124],31:[2,124],33:[2,124],34:[2,124],36:[2,124],37:[2,124],38:[2,124],39:[2,124],40:[2,124],41:[2,124],48:[2,124],49:[2,124],50:[2,124],54:[2,124],55:[2,124],76:[2,124],79:[2,124],82:[2,124],86:[2,124],87:[2,124],92:[2,124],93:[2,124],94:[2,124],100:[2,124],104:[2,124],105:[2,124],108:[2,124],110:[2,124],112:[2,124],114:[2,124],123:[2,124],129:[2,124],131:[2,124],132:[2,124],133:[2,124],134:[2,124],135:[2,124],136:[2,124]},{1:[2,92],6:[2,92],28:[2,92],29:[2,92],43:[2,92],52:[2,92],57:[2,92],60:[2,92],69:[2,92],70:[2,92],71:[2,92],72:[2,92],74:[2,92],76:[2,92],77:[2,92],81:[2,92],83:[2,92],88:[2,92],89:[2,92],90:[2,92],95:[2,92],97:[2,92],106:[2,92],108:[2,92],109:[2,92],110:[2,92],114:[2,92],122:[2,92],130:[2,92],133:[2,92],134:[2,92],135:[2,92],136:[2,92],137:[2,92],138:[2,92],139:[2,92],140:[2,92],141:[2,92],142:[2,92],143:[2,92],144:[2,92]},{1:[2,110],6:[2,110],28:[2,110],29:[2,110],52:[2,110],57:[2,110],60:[2,110],69:[2,110],70:[2,110],71:[2,110],72:[2,110],74:[2,110],76:[2,110],77:[2,110],81:[2,110],88:[2,110],89:[2,110],90:[2,110],95:[2,110],97:[2,110],106:[2,110],108:[2,110],109:[2,110],110:[2,110],114:[2,110],122:[2,110],130:[2,110],133:[2,110],134:[2,110],137:[2,110],138:[2,110],139:[2,110],140:[2,110],141:[2,110],142:[2,110],143:[2,110]},{1:[2,39],6:[2,39],28:[2,39],29:[2,39],52:[2,39],57:[2,39],60:[2,39],76:[2,39],81:[2,39],90:[2,39],95:[2,39],97:[2,39],106:[2,39],107:88,108:[2,39],109:[2,39],110:[2,39],113:89,114:[2,39],115:72,122:[2,39],130:[2,39],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{7:255,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:256,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,116],6:[2,116],28:[2,116],29:[2,116],43:[2,116],52:[2,116],57:[2,116],60:[2,116],69:[2,116],70:[2,116],71:[2,116],72:[2,116],74:[2,116],76:[2,116],77:[2,116],81:[2,116],83:[2,116],88:[2,116],89:[2,116],90:[2,116],95:[2,116],97:[2,116],106:[2,116],108:[2,116],109:[2,116],110:[2,116],114:[2,116],122:[2,116],130:[2,116],133:[2,116],134:[2,116],135:[2,116],136:[2,116],137:[2,116],138:[2,116],139:[2,116],140:[2,116],141:[2,116],142:[2,116],143:[2,116],144:[2,116]},{6:[2,56],28:[2,56],56:257,57:[1,240],90:[2,56]},{6:[2,135],28:[2,135],29:[2,135],57:[2,135],60:[1,258],90:[2,135],95:[2,135],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{53:259,54:[1,63],55:[1,64]},{6:[2,57],28:[2,57],29:[2,57],30:112,31:[1,76],47:113,58:260,59:110,60:[1,111],61:114,62:115,79:[1,73],93:[1,116],94:[1,117]},{6:[1,261],28:[1,262]},{6:[2,64],28:[2,64],29:[2,64],52:[2,64],57:[2,64]},{7:263,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,27],6:[2,27],28:[2,27],29:[2,27],52:[2,27],57:[2,27],60:[2,27],76:[2,27],81:[2,27],90:[2,27],95:[2,27],97:[2,27],102:[2,27],103:[2,27],106:[2,27],108:[2,27],109:[2,27],110:[2,27],114:[2,27],122:[2,27],125:[2,27],127:[2,27],130:[2,27],133:[2,27],134:[2,27],137:[2,27],138:[2,27],139:[2,27],140:[2,27],141:[2,27],142:[2,27],143:[2,27]},{6:[1,77],29:[1,264]},{1:[2,211],6:[2,211],28:[2,211],29:[2,211],52:[2,211],57:[2,211],60:[2,211],76:[2,211],81:[2,211],90:[2,211],95:[2,211],97:[2,211],106:[2,211],107:88,108:[2,211],109:[2,211],110:[2,211],113:89,114:[2,211],115:72,122:[2,211],130:[2,211],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{7:265,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:266,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,214],6:[2,214],28:[2,214],29:[2,214],52:[2,214],57:[2,214],60:[2,214],76:[2,214],81:[2,214],90:[2,214],95:[2,214],97:[2,214],106:[2,214],107:88,108:[2,214],109:[2,214],110:[2,214],113:89,114:[2,214],115:72,122:[2,214],130:[2,214],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,191],6:[2,191],28:[2,191],29:[2,191],52:[2,191],57:[2,191],60:[2,191],76:[2,191],81:[2,191],90:[2,191],95:[2,191],97:[2,191],106:[2,191],108:[2,191],109:[2,191],110:[2,191],114:[2,191],122:[2,191],130:[2,191],133:[2,191],134:[2,191],137:[2,191],138:[2,191],139:[2,191],140:[2,191],141:[2,191],142:[2,191],143:[2,191]},{7:267,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,141],6:[2,141],28:[2,141],29:[2,141],52:[2,141],57:[2,141],60:[2,141],76:[2,141],81:[2,141],90:[2,141],95:[2,141],97:[2,141],102:[1,268],106:[2,141],108:[2,141],109:[2,141],110:[2,141],114:[2,141],122:[2,141],130:[2,141],133:[2,141],134:[2,141],137:[2,141],138:[2,141],139:[2,141],140:[2,141],141:[2,141],142:[2,141],143:[2,141]},{14:269,28:[1,119]},{14:272,28:[1,119],30:270,31:[1,76],62:271,79:[1,73]},{124:273,126:230,127:[1,231]},{29:[1,274],125:[1,275],126:276,127:[1,231]},{29:[2,184],125:[2,184],127:[2,184]},{7:278,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],99:277,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,103],6:[2,103],14:279,28:[1,119],29:[2,103],52:[2,103],57:[2,103],60:[2,103],76:[2,103],81:[2,103],90:[2,103],95:[2,103],97:[2,103],106:[2,103],107:88,108:[1,68],109:[2,103],110:[1,69],113:89,114:[1,71],115:72,122:[2,103],130:[2,103],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,106],6:[2,106],28:[2,106],29:[2,106],52:[2,106],57:[2,106],60:[2,106],76:[2,106],81:[2,106],90:[2,106],95:[2,106],97:[2,106],106:[2,106],108:[2,106],109:[2,106],110:[2,106],114:[2,106],122:[2,106],130:[2,106],133:[2,106],134:[2,106],137:[2,106],138:[2,106],139:[2,106],140:[2,106],141:[2,106],142:[2,106],143:[2,106]},{7:280,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,148],6:[2,148],28:[2,148],29:[2,148],52:[2,148],57:[2,148],60:[2,148],69:[2,148],70:[2,148],71:[2,148],72:[2,148],74:[2,148],76:[2,148],77:[2,148],81:[2,148],88:[2,148],89:[2,148],90:[2,148],95:[2,148],97:[2,148],106:[2,148],108:[2,148],109:[2,148],110:[2,148],114:[2,148],122:[2,148],130:[2,148],133:[2,148],134:[2,148],137:[2,148],138:[2,148],139:[2,148],140:[2,148],141:[2,148],142:[2,148],143:[2,148]},{6:[1,77],29:[1,281]},{7:282,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,71],11:[2,124],13:[2,124],28:[2,71],31:[2,124],33:[2,124],34:[2,124],36:[2,124],37:[2,124],38:[2,124],39:[2,124],40:[2,124],41:[2,124],48:[2,124],49:[2,124],50:[2,124],54:[2,124],55:[2,124],57:[2,71],79:[2,124],82:[2,124],86:[2,124],87:[2,124],92:[2,124],93:[2,124],94:[2,124],95:[2,71],100:[2,124],104:[2,124],105:[2,124],108:[2,124],110:[2,124],112:[2,124],114:[2,124],123:[2,124],129:[2,124],131:[2,124],132:[2,124],133:[2,124],134:[2,124],135:[2,124],136:[2,124]},{6:[1,284],28:[1,285],95:[1,283]},{6:[2,57],7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[2,57],29:[2,57],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],90:[2,57],92:[1,61],93:[1,62],94:[1,60],95:[2,57],98:286,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,56],28:[2,56],29:[2,56],56:287,57:[1,240]},{1:[2,188],6:[2,188],28:[2,188],29:[2,188],52:[2,188],57:[2,188],60:[2,188],76:[2,188],81:[2,188],90:[2,188],95:[2,188],97:[2,188],106:[2,188],108:[2,188],109:[2,188],110:[2,188],114:[2,188],122:[2,188],125:[2,188],130:[2,188],133:[2,188],134:[2,188],137:[2,188],138:[2,188],139:[2,188],140:[2,188],141:[2,188],142:[2,188],143:[2,188]},{7:288,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:289,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{120:[2,166],121:[2,166]},{30:167,31:[1,76],47:168,61:169,62:170,79:[1,73],93:[1,116],94:[1,117],119:290},{1:[2,173],6:[2,173],28:[2,173],29:[2,173],52:[2,173],57:[2,173],60:[2,173],76:[2,173],81:[2,173],90:[2,173],95:[2,173],97:[2,173],106:[2,173],107:88,108:[2,173],109:[1,291],110:[2,173],113:89,114:[2,173],115:72,122:[1,292],130:[2,173],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,174],6:[2,174],28:[2,174],29:[2,174],52:[2,174],57:[2,174],60:[2,174],76:[2,174],81:[2,174],90:[2,174],95:[2,174],97:[2,174],106:[2,174],107:88,108:[2,174],109:[1,293],110:[2,174],113:89,114:[2,174],115:72,122:[2,174],130:[2,174],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[1,295],28:[1,296],81:[1,294]},{6:[2,57],10:177,28:[2,57],29:[2,57],30:178,31:[1,76],32:179,33:[1,74],34:[1,75],44:297,45:176,47:180,49:[1,48],81:[2,57],93:[1,116]},{7:298,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,299],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,91],6:[2,91],28:[2,91],29:[2,91],43:[2,91],52:[2,91],57:[2,91],60:[2,91],69:[2,91],70:[2,91],71:[2,91],72:[2,91],74:[2,91],76:[2,91],77:[2,91],81:[2,91],83:[2,91],88:[2,91],89:[2,91],90:[2,91],95:[2,91],97:[2,91],106:[2,91],108:[2,91],109:[2,91],110:[2,91],114:[2,91],122:[2,91],130:[2,91],133:[2,91],134:[2,91],135:[2,91],136:[2,91],137:[2,91],138:[2,91],139:[2,91],140:[2,91],141:[2,91],142:[2,91],143:[2,91],144:[2,91]},{7:300,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,76:[2,127],79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{76:[2,128],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,40],6:[2,40],28:[2,40],29:[2,40],52:[2,40],57:[2,40],60:[2,40],76:[2,40],81:[2,40],90:[2,40],95:[2,40],97:[2,40],106:[2,40],107:88,108:[2,40],109:[2,40],110:[2,40],113:89,114:[2,40],115:72,122:[2,40],130:[2,40],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{29:[1,301],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[1,284],28:[1,285],90:[1,302]},{6:[2,71],28:[2,71],29:[2,71],57:[2,71],90:[2,71],95:[2,71]},{14:303,28:[1,119]},{6:[2,60],28:[2,60],29:[2,60],52:[2,60],57:[2,60]},{30:112,31:[1,76],47:113,58:304,59:110,60:[1,111],61:114,62:115,79:[1,73],93:[1,116],94:[1,117]},{6:[2,58],28:[2,58],29:[2,58],30:112,31:[1,76],47:113,51:305,57:[2,58],58:109,59:110,60:[1,111],61:114,62:115,79:[1,73],93:[1,116],94:[1,117]},{6:[2,65],28:[2,65],29:[2,65],52:[2,65],57:[2,65],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,28],6:[2,28],28:[2,28],29:[2,28],52:[2,28],57:[2,28],60:[2,28],76:[2,28],81:[2,28],90:[2,28],95:[2,28],97:[2,28],102:[2,28],103:[2,28],106:[2,28],108:[2,28],109:[2,28],110:[2,28],114:[2,28],122:[2,28],125:[2,28],127:[2,28],130:[2,28],133:[2,28],134:[2,28],137:[2,28],138:[2,28],139:[2,28],140:[2,28],141:[2,28],142:[2,28],143:[2,28]},{29:[1,306],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,213],6:[2,213],28:[2,213],29:[2,213],52:[2,213],57:[2,213],60:[2,213],76:[2,213],81:[2,213],90:[2,213],95:[2,213],97:[2,213],106:[2,213],107:88,108:[2,213],109:[2,213],110:[2,213],113:89,114:[2,213],115:72,122:[2,213],130:[2,213],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{14:307,28:[1,119],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{14:308,28:[1,119]},{1:[2,142],6:[2,142],28:[2,142],29:[2,142],52:[2,142],57:[2,142],60:[2,142],76:[2,142],81:[2,142],90:[2,142],95:[2,142],97:[2,142],106:[2,142],108:[2,142],109:[2,142],110:[2,142],114:[2,142],122:[2,142],130:[2,142],133:[2,142],134:[2,142],137:[2,142],138:[2,142],139:[2,142],140:[2,142],141:[2,142],142:[2,142],143:[2,142]},{14:309,28:[1,119]},{14:310,28:[1,119]},{1:[2,146],6:[2,146],28:[2,146],29:[2,146],52:[2,146],57:[2,146],60:[2,146],76:[2,146],81:[2,146],90:[2,146],95:[2,146],97:[2,146],102:[2,146],106:[2,146],108:[2,146],109:[2,146],110:[2,146],114:[2,146],122:[2,146],130:[2,146],133:[2,146],134:[2,146],137:[2,146],138:[2,146],139:[2,146],140:[2,146],141:[2,146],142:[2,146],143:[2,146]},{29:[1,311],125:[1,312],126:276,127:[1,231]},{1:[2,182],6:[2,182],28:[2,182],29:[2,182],52:[2,182],57:[2,182],60:[2,182],76:[2,182],81:[2,182],90:[2,182],95:[2,182],97:[2,182],106:[2,182],108:[2,182],109:[2,182],110:[2,182],114:[2,182],122:[2,182],130:[2,182],133:[2,182],134:[2,182],137:[2,182],138:[2,182],139:[2,182],140:[2,182],141:[2,182],142:[2,182],143:[2,182]},{14:313,28:[1,119]},{29:[2,185],125:[2,185],127:[2,185]},{14:314,28:[1,119],57:[1,315]},{28:[2,138],57:[2,138],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,104],6:[2,104],28:[2,104],29:[2,104],52:[2,104],57:[2,104],60:[2,104],76:[2,104],81:[2,104],90:[2,104],95:[2,104],97:[2,104],106:[2,104],108:[2,104],109:[2,104],110:[2,104],114:[2,104],122:[2,104],130:[2,104],133:[2,104],134:[2,104],137:[2,104],138:[2,104],139:[2,104],140:[2,104],141:[2,104],142:[2,104],143:[2,104]},{1:[2,107],6:[2,107],14:316,28:[1,119],29:[2,107],52:[2,107],57:[2,107],60:[2,107],76:[2,107],81:[2,107],90:[2,107],95:[2,107],97:[2,107],106:[2,107],107:88,108:[1,68],109:[2,107],110:[1,69],113:89,114:[1,71],115:72,122:[2,107],130:[2,107],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{106:[1,317]},{95:[1,318],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,122],6:[2,122],28:[2,122],29:[2,122],43:[2,122],52:[2,122],57:[2,122],60:[2,122],69:[2,122],70:[2,122],71:[2,122],72:[2,122],74:[2,122],76:[2,122],77:[2,122],81:[2,122],88:[2,122],89:[2,122],90:[2,122],95:[2,122],97:[2,122],106:[2,122],108:[2,122],109:[2,122],110:[2,122],114:[2,122],120:[2,122],121:[2,122],122:[2,122],130:[2,122],133:[2,122],134:[2,122],137:[2,122],138:[2,122],139:[2,122],140:[2,122],141:[2,122],142:[2,122],143:[2,122]},{7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],98:319,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:211,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:[1,154],30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],60:[1,156],61:50,62:51,63:155,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],91:320,92:[1,61],93:[1,62],94:[1,60],98:153,100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[2,131],28:[2,131],29:[2,131],57:[2,131],90:[2,131],95:[2,131]},{6:[1,284],28:[1,285],29:[1,321]},{1:[2,151],6:[2,151],28:[2,151],29:[2,151],52:[2,151],57:[2,151],60:[2,151],76:[2,151],81:[2,151],90:[2,151],95:[2,151],97:[2,151],106:[2,151],107:88,108:[1,68],109:[2,151],110:[1,69],113:89,114:[1,71],115:72,122:[2,151],130:[2,151],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,153],6:[2,153],28:[2,153],29:[2,153],52:[2,153],57:[2,153],60:[2,153],76:[2,153],81:[2,153],90:[2,153],95:[2,153],97:[2,153],106:[2,153],107:88,108:[1,68],109:[2,153],110:[1,69],113:89,114:[1,71],115:72,122:[2,153],130:[2,153],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{120:[2,172],121:[2,172]},{7:322,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:323,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:324,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,95],6:[2,95],28:[2,95],29:[2,95],43:[2,95],52:[2,95],57:[2,95],60:[2,95],69:[2,95],70:[2,95],71:[2,95],72:[2,95],74:[2,95],76:[2,95],77:[2,95],81:[2,95],88:[2,95],89:[2,95],90:[2,95],95:[2,95],97:[2,95],106:[2,95],108:[2,95],109:[2,95],110:[2,95],114:[2,95],120:[2,95],121:[2,95],122:[2,95],130:[2,95],133:[2,95],134:[2,95],137:[2,95],138:[2,95],139:[2,95],140:[2,95],141:[2,95],142:[2,95],143:[2,95]},{10:177,30:178,31:[1,76],32:179,33:[1,74],34:[1,75],44:325,45:176,47:180,49:[1,48],93:[1,116]},{6:[2,96],10:177,28:[2,96],29:[2,96],30:178,31:[1,76],32:179,33:[1,74],34:[1,75],44:175,45:176,47:180,49:[1,48],57:[2,96],80:326,93:[1,116]},{6:[2,98],28:[2,98],29:[2,98],57:[2,98],81:[2,98]},{6:[2,43],28:[2,43],29:[2,43],57:[2,43],81:[2,43],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{7:327,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{76:[2,126],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,41],6:[2,41],28:[2,41],29:[2,41],52:[2,41],57:[2,41],60:[2,41],76:[2,41],81:[2,41],90:[2,41],95:[2,41],97:[2,41],106:[2,41],108:[2,41],109:[2,41],110:[2,41],114:[2,41],122:[2,41],130:[2,41],133:[2,41],134:[2,41],137:[2,41],138:[2,41],139:[2,41],140:[2,41],141:[2,41],142:[2,41],143:[2,41]},{1:[2,117],6:[2,117],28:[2,117],29:[2,117],43:[2,117],52:[2,117],57:[2,117],60:[2,117],69:[2,117],70:[2,117],71:[2,117],72:[2,117],74:[2,117],76:[2,117],77:[2,117],81:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],95:[2,117],97:[2,117],106:[2,117],108:[2,117],109:[2,117],110:[2,117],114:[2,117],122:[2,117],130:[2,117],133:[2,117],134:[2,117],135:[2,117],136:[2,117],137:[2,117],138:[2,117],139:[2,117],140:[2,117],141:[2,117],142:[2,117],143:[2,117],144:[2,117]},{1:[2,52],6:[2,52],28:[2,52],29:[2,52],52:[2,52],57:[2,52],60:[2,52],76:[2,52],81:[2,52],90:[2,52],95:[2,52],97:[2,52],106:[2,52],108:[2,52],109:[2,52],110:[2,52],114:[2,52],122:[2,52],130:[2,52],133:[2,52],134:[2,52],137:[2,52],138:[2,52],139:[2,52],140:[2,52],141:[2,52],142:[2,52],143:[2,52]},{6:[2,61],28:[2,61],29:[2,61],52:[2,61],57:[2,61]},{6:[2,56],28:[2,56],29:[2,56],56:328,57:[1,213]},{1:[2,212],6:[2,212],28:[2,212],29:[2,212],52:[2,212],57:[2,212],60:[2,212],76:[2,212],81:[2,212],90:[2,212],95:[2,212],97:[2,212],106:[2,212],108:[2,212],109:[2,212],110:[2,212],114:[2,212],122:[2,212],130:[2,212],133:[2,212],134:[2,212],137:[2,212],138:[2,212],139:[2,212],140:[2,212],141:[2,212],142:[2,212],143:[2,212]},{1:[2,189],6:[2,189],28:[2,189],29:[2,189],52:[2,189],57:[2,189],60:[2,189],76:[2,189],81:[2,189],90:[2,189],95:[2,189],97:[2,189],106:[2,189],108:[2,189],109:[2,189],110:[2,189],114:[2,189],122:[2,189],125:[2,189],130:[2,189],133:[2,189],134:[2,189],137:[2,189],138:[2,189],139:[2,189],140:[2,189],141:[2,189],142:[2,189],143:[2,189]},{1:[2,143],6:[2,143],28:[2,143],29:[2,143],52:[2,143],57:[2,143],60:[2,143],76:[2,143],81:[2,143],90:[2,143],95:[2,143],97:[2,143],106:[2,143],108:[2,143],109:[2,143],110:[2,143],114:[2,143],122:[2,143],130:[2,143],133:[2,143],134:[2,143],137:[2,143],138:[2,143],139:[2,143],140:[2,143],141:[2,143],142:[2,143],143:[2,143]},{1:[2,144],6:[2,144],28:[2,144],29:[2,144],52:[2,144],57:[2,144],60:[2,144],76:[2,144],81:[2,144],90:[2,144],95:[2,144],97:[2,144],102:[2,144],106:[2,144],108:[2,144],109:[2,144],110:[2,144],114:[2,144],122:[2,144],130:[2,144],133:[2,144],134:[2,144],137:[2,144],138:[2,144],139:[2,144],140:[2,144],141:[2,144],142:[2,144],143:[2,144]},{1:[2,145],6:[2,145],28:[2,145],29:[2,145],52:[2,145],57:[2,145],60:[2,145],76:[2,145],81:[2,145],90:[2,145],95:[2,145],97:[2,145],102:[2,145],106:[2,145],108:[2,145],109:[2,145],110:[2,145],114:[2,145],122:[2,145],130:[2,145],133:[2,145],134:[2,145],137:[2,145],138:[2,145],139:[2,145],140:[2,145],141:[2,145],142:[2,145],143:[2,145]},{1:[2,180],6:[2,180],28:[2,180],29:[2,180],52:[2,180],57:[2,180],60:[2,180],76:[2,180],81:[2,180],90:[2,180],95:[2,180],97:[2,180],106:[2,180],108:[2,180],109:[2,180],110:[2,180],114:[2,180],122:[2,180],130:[2,180],133:[2,180],134:[2,180],137:[2,180],138:[2,180],139:[2,180],140:[2,180],141:[2,180],142:[2,180],143:[2,180]},{14:329,28:[1,119]},{29:[1,330]},{6:[1,331],29:[2,186],125:[2,186],127:[2,186]},{7:332,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{1:[2,108],6:[2,108],28:[2,108],29:[2,108],52:[2,108],57:[2,108],60:[2,108],76:[2,108],81:[2,108],90:[2,108],95:[2,108],97:[2,108],106:[2,108],108:[2,108],109:[2,108],110:[2,108],114:[2,108],122:[2,108],130:[2,108],133:[2,108],134:[2,108],137:[2,108],138:[2,108],139:[2,108],140:[2,108],141:[2,108],142:[2,108],143:[2,108]},{1:[2,149],6:[2,149],28:[2,149],29:[2,149],52:[2,149],57:[2,149],60:[2,149],69:[2,149],70:[2,149],71:[2,149],72:[2,149],74:[2,149],76:[2,149],77:[2,149],81:[2,149],88:[2,149],89:[2,149],90:[2,149],95:[2,149],97:[2,149],106:[2,149],108:[2,149],109:[2,149],110:[2,149],114:[2,149],122:[2,149],130:[2,149],133:[2,149],134:[2,149],137:[2,149],138:[2,149],139:[2,149],140:[2,149],141:[2,149],142:[2,149],143:[2,149]},{1:[2,125],6:[2,125],28:[2,125],29:[2,125],52:[2,125],57:[2,125],60:[2,125],69:[2,125],70:[2,125],71:[2,125],72:[2,125],74:[2,125],76:[2,125],77:[2,125],81:[2,125],88:[2,125],89:[2,125],90:[2,125],95:[2,125],97:[2,125],106:[2,125],108:[2,125],109:[2,125],110:[2,125],114:[2,125],122:[2,125],130:[2,125],133:[2,125],134:[2,125],137:[2,125],138:[2,125],139:[2,125],140:[2,125],141:[2,125],142:[2,125],143:[2,125]},{6:[2,132],28:[2,132],29:[2,132],57:[2,132],90:[2,132],95:[2,132]},{6:[2,56],28:[2,56],29:[2,56],56:333,57:[1,240]},{6:[2,133],28:[2,133],29:[2,133],57:[2,133],90:[2,133],95:[2,133]},{1:[2,175],6:[2,175],28:[2,175],29:[2,175],52:[2,175],57:[2,175],60:[2,175],76:[2,175],81:[2,175],90:[2,175],95:[2,175],97:[2,175],106:[2,175],107:88,108:[2,175],109:[2,175],110:[2,175],113:89,114:[2,175],115:72,122:[1,334],130:[2,175],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,177],6:[2,177],28:[2,177],29:[2,177],52:[2,177],57:[2,177],60:[2,177],76:[2,177],81:[2,177],90:[2,177],95:[2,177],97:[2,177],106:[2,177],107:88,108:[2,177],109:[1,335],110:[2,177],113:89,114:[2,177],115:72,122:[2,177],130:[2,177],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,176],6:[2,176],28:[2,176],29:[2,176],52:[2,176],57:[2,176],60:[2,176],76:[2,176],81:[2,176],90:[2,176],95:[2,176],97:[2,176],106:[2,176],107:88,108:[2,176],109:[2,176],110:[2,176],113:89,114:[2,176],115:72,122:[2,176],130:[2,176],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[2,99],28:[2,99],29:[2,99],57:[2,99],81:[2,99]},{6:[2,56],28:[2,56],29:[2,56],56:336,57:[1,250]},{29:[1,337],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[1,261],28:[1,262],29:[1,338]},{29:[1,339]},{1:[2,183],6:[2,183],28:[2,183],29:[2,183],52:[2,183],57:[2,183],60:[2,183],76:[2,183],81:[2,183],90:[2,183],95:[2,183],97:[2,183],106:[2,183],108:[2,183],109:[2,183],110:[2,183],114:[2,183],122:[2,183],130:[2,183],133:[2,183],134:[2,183],137:[2,183],138:[2,183],139:[2,183],140:[2,183],141:[2,183],142:[2,183],143:[2,183]},{29:[2,187],125:[2,187],127:[2,187]},{28:[2,139],57:[2,139],107:88,108:[1,68],110:[1,69],113:89,114:[1,71],115:72,130:[1,87],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[1,284],28:[1,285],29:[1,340]},{7:341,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{7:342,8:121,9:19,10:20,11:[1,21],12:22,13:[1,49],15:6,16:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,30:65,31:[1,76],32:52,33:[1,74],34:[1,75],35:24,36:[1,53],37:[1,54],38:[1,55],39:[1,56],40:[1,57],41:[1,58],42:23,47:66,48:[1,47],49:[1,48],50:[1,29],53:30,54:[1,63],55:[1,64],61:50,62:51,64:37,66:25,67:26,68:27,79:[1,73],82:[1,44],86:[1,28],87:[1,46],92:[1,61],93:[1,62],94:[1,60],100:[1,39],104:[1,45],105:[1,59],107:40,108:[1,68],110:[1,69],111:41,112:[1,70],113:42,114:[1,71],115:72,123:[1,43],128:38,129:[1,67],131:[1,31],132:[1,32],133:[1,33],134:[1,34],135:[1,35],136:[1,36]},{6:[1,295],28:[1,296],29:[1,343]},{6:[2,44],28:[2,44],29:[2,44],57:[2,44],81:[2,44]},{6:[2,62],28:[2,62],29:[2,62],52:[2,62],57:[2,62]},{1:[2,181],6:[2,181],28:[2,181],29:[2,181],52:[2,181],57:[2,181],60:[2,181],76:[2,181],81:[2,181],90:[2,181],95:[2,181],97:[2,181],106:[2,181],108:[2,181],109:[2,181],110:[2,181],114:[2,181],122:[2,181],130:[2,181],133:[2,181],134:[2,181],137:[2,181],138:[2,181],139:[2,181],140:[2,181],141:[2,181],142:[2,181],143:[2,181]},{6:[2,134],28:[2,134],29:[2,134],57:[2,134],90:[2,134],95:[2,134]},{1:[2,178],6:[2,178],28:[2,178],29:[2,178],52:[2,178],57:[2,178],60:[2,178],76:[2,178],81:[2,178],90:[2,178],95:[2,178],97:[2,178],106:[2,178],107:88,108:[2,178],109:[2,178],110:[2,178],113:89,114:[2,178],115:72,122:[2,178],130:[2,178],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{1:[2,179],6:[2,179],28:[2,179],29:[2,179],52:[2,179],57:[2,179],60:[2,179],76:[2,179],81:[2,179],90:[2,179],95:[2,179],97:[2,179],106:[2,179],107:88,108:[2,179],109:[2,179],110:[2,179],113:89,114:[2,179],115:72,122:[2,179],130:[2,179],133:[1,80],134:[1,79],137:[1,78],138:[1,81],139:[1,82],140:[1,83],141:[1,84],142:[1,85],143:[1,86]},{6:[2,100],28:[2,100],29:[2,100],57:[2,100],81:[2,100]}],
defaultActions: {63:[2,54],64:[2,55],95:[2,115],200:[2,94]},
parseError: function parseError(str, hash) {
    if (hash.recoverable) {
        this.trace(str);
    } else {
        throw new Error(str);
    }
},
parse: function parse(input) {
    var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
    var args = lstack.slice.call(arguments, 1);
    this.lexer.setInput(input);
    this.lexer.yy = this.yy;
    this.yy.lexer = this.lexer;
    this.yy.parser = this;
    if (typeof this.lexer.yylloc == 'undefined') {
        this.lexer.yylloc = {};
    }
    var yyloc = this.lexer.yylloc;
    lstack.push(yyloc);
    var ranges = this.lexer.options && this.lexer.options.ranges;
    if (typeof this.yy.parseError === 'function') {
        this.parseError = this.yy.parseError;
    } else {
        this.parseError = Object.getPrototypeOf(this).parseError;
    }
    function popStack(n) {
        stack.length = stack.length - 2 * n;
        vstack.length = vstack.length - n;
        lstack.length = lstack.length - n;
    }
    function lex() {
        var token;
        token = self.lexer.lex() || EOF;
        if (typeof token !== 'number') {
            token = self.symbols_[token] || token;
        }
        return token;
    }
    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
    while (true) {
        state = stack[stack.length - 1];
        if (this.defaultActions[state]) {
            action = this.defaultActions[state];
        } else {
            if (symbol === null || typeof symbol == 'undefined') {
                symbol = lex();
            }
            action = table[state] && table[state][symbol];
        }
                    if (typeof action === 'undefined' || !action.length || !action[0]) {
                var errStr = '';
                expected = [];
                for (p in table[state]) {
                    if (this.terminals_[p] && p > TERROR) {
                        expected.push('\'' + this.terminals_[p] + '\'');
                    }
                }
                if (this.lexer.showPosition) {
                    errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + this.lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'';
                } else {
                    errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'');
                }
                this.parseError(errStr, {
                    text: this.lexer.match,
                    token: this.terminals_[symbol] || symbol,
                    line: this.lexer.yylineno,
                    loc: yyloc,
                    expected: expected
                });
            }
        if (action[0] instanceof Array && action.length > 1) {
            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);
        }
        switch (action[0]) {
        case 1:
            stack.push(symbol);
            vstack.push(this.lexer.yytext);
            lstack.push(this.lexer.yylloc);
            stack.push(action[1]);
            symbol = null;
            if (!preErrorSymbol) {
                yyleng = this.lexer.yyleng;
                yytext = this.lexer.yytext;
                yylineno = this.lexer.yylineno;
                yyloc = this.lexer.yylloc;
                if (recovering > 0) {
                    recovering--;
                }
            } else {
                symbol = preErrorSymbol;
                preErrorSymbol = null;
            }
            break;
        case 2:
            len = this.productions_[action[1]][1];
            yyval.$ = vstack[vstack.length - len];
            yyval._$ = {
                first_line: lstack[lstack.length - (len || 1)].first_line,
                last_line: lstack[lstack.length - 1].last_line,
                first_column: lstack[lstack.length - (len || 1)].first_column,
                last_column: lstack[lstack.length - 1].last_column
            };
            if (ranges) {
                yyval._$.range = [
                    lstack[lstack.length - (len || 1)].range[0],
                    lstack[lstack.length - 1].range[1]
                ];
            }
            r = this.performAction.apply(yyval, [
                yytext,
                yyleng,
                yylineno,
                this.yy,
                action[1],
                vstack,
                lstack
            ].concat(args));
            if (typeof r !== 'undefined') {
                return r;
            }
            if (len) {
                stack = stack.slice(0, -1 * len * 2);
                vstack = vstack.slice(0, -1 * len);
                lstack = lstack.slice(0, -1 * len);
            }
            stack.push(this.productions_[action[1]][0]);
            vstack.push(yyval.$);
            lstack.push(yyval._$);
            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
            stack.push(newState);
            break;
        case 3:
            return true;
        }
    }
    return true;
}};

function Parser () {
  this.yy = {};
}
Parser.prototype = parser;parser.Parser = Parser;
return new Parser;
})();


if (typeof _dereq_ !== 'undefined' && typeof exports !== 'undefined') {
exports.parser = parser;
exports.Parser = parser.Parser;
exports.parse = function () { return parser.parse.apply(parser, arguments); };
exports.main = function commonjsMain(args) {
    if (!args[1]) {
        console.log('Usage: '+args[0]+' FILE');
        process.exit(1);
    }
    var source = _dereq_('fs').readFileSync(_dereq_('path').normalize(args[1]), "utf8");
    return exports.parser.parse(source);
};
if (typeof module !== 'undefined' && _dereq_.main === module) {
  exports.main(process.argv.slice(1));
}
}
}).call(this,_dereq_("FWaASH"))
},{"FWaASH":14,"fs":12,"path":13}],8:[function(_dereq_,module,exports){
// Generated by IcedCoffeeScript 1.8.0-c
(function() {
  var CoffeeScript, Module, binary, child_process, ext, findExtension, fork, helpers, loadFile, path, _i, _len, _ref;

  CoffeeScript = _dereq_('./coffee-script');

  child_process = _dereq_('child_process');

  helpers = _dereq_('./helpers');

  path = _dereq_('path');

  loadFile = function(module, filename) {
    var answer;
    answer = CoffeeScript._compileFile(filename, false, {
      runtime: "interp"
    });
    return module._compile(answer, filename);
  };

  if (_dereq_.extensions) {
    _ref = CoffeeScript.FILE_EXTENSIONS;
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      ext = _ref[_i];
      _dereq_.extensions[ext] = loadFile;
    }
    Module = _dereq_('module');
    findExtension = function(filename) {
      var curExtension, extensions;
      extensions = path.basename(filename).split('.');
      if (extensions[0] === '') {
        extensions.shift();
      }
      while (extensions.shift()) {
        curExtension = '.' + extensions.join('.');
        if (Module._extensions[curExtension]) {
          return curExtension;
        }
      }
      return '.js';
    };
    Module.prototype.load = function(filename) {
      var extension;
      this.filename = filename;
      this.paths = Module._nodeModulePaths(path.dirname(filename));
      extension = findExtension(filename);
      Module._extensions[extension](this, filename);
      return this.loaded = true;
    };
  }

  if (child_process) {
    fork = child_process.fork;
    binary = _dereq_.resolve('../../bin/coffee');
    child_process.fork = function(path, args, options) {
      if (helpers.isCoffee(path)) {
        if (!Array.isArray(args)) {
          options = args || {};
          args = [];
        }
        args = [path].concat(args);
        path = binary;
      }
      return fork(path, args, options);
    };
  }

}).call(this);

},{"./coffee-script":2,"./helpers":3,"child_process":12,"module":12,"path":13}],9:[function(_dereq_,module,exports){
// Generated by IcedCoffeeScript 1.8.0-c
(function() {
  var BALANCED_PAIRS, CALL_CLOSERS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, generate, left, rite, _i, _len, _ref,
    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
    __slice = [].slice;

  generate = function(tag, value, origin) {
    var tok;
    tok = [tag, value];
    tok.generated = true;
    if (origin) {
      tok.origin = origin;
    }
    return tok;
  };

  exports.Rewriter = (function() {
    function Rewriter() {}

    Rewriter.prototype.rewrite = function(tokens) {
      this.tokens = tokens;
      this.removeLeadingNewlines();
      this.closeOpenCalls();
      this.closeOpenIndexes();
      this.normalizeLines();
      this.tagPostfixConditionals();
      this.addImplicitBracesAndParens();
      this.addLocationDataToGeneratedTokens();
      return this.tokens;
    };

    Rewriter.prototype.scanTokens = function(block) {
      var i, token, tokens;
      tokens = this.tokens;
      i = 0;
      while (token = tokens[i]) {
        i += block.call(this, token, i, tokens);
      }
      return true;
    };

    Rewriter.prototype.detectEnd = function(i, condition, action) {
      var levels, token, tokens, _ref, _ref1;
      tokens = this.tokens;
      levels = 0;
      while (token = tokens[i]) {
        if (levels === 0 && condition.call(this, token, i)) {
          return action.call(this, token, i);
        }
        if (!token || levels < 0) {
          return action.call(this, token, i - 1);
        }
        if (_ref = token[0], __indexOf.call(EXPRESSION_START, _ref) >= 0) {
          levels += 1;
        } else if (_ref1 = token[0], __indexOf.call(EXPRESSION_END, _ref1) >= 0) {
          levels -= 1;
        }
        i += 1;
      }
      return i - 1;
    };

    Rewriter.prototype.removeLeadingNewlines = function() {
      var i, tag, _i, _len, _ref;
      _ref = this.tokens;
      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
        tag = _ref[i][0];
        if (tag !== 'TERMINATOR') {
          break;
        }
      }
      if (i) {
        return this.tokens.splice(0, i);
      }
    };

    Rewriter.prototype.closeOpenCalls = function() {
      var action, condition;
      condition = function(token, i) {
        var _ref;
        return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
      };
      action = function(token, i) {
        return this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END';
      };
      return this.scanTokens(function(token, i) {
        if (token[0] === 'CALL_START') {
          this.detectEnd(i + 1, condition, action);
        }
        return 1;
      });
    };

    Rewriter.prototype.closeOpenIndexes = function() {
      var action, condition;
      condition = function(token, i) {
        var _ref;
        return (_ref = token[0]) === ']' || _ref === 'INDEX_END';
      };
      action = function(token, i) {
        return token[0] = 'INDEX_END';
      };
      return this.scanTokens(function(token, i) {
        if (token[0] === 'INDEX_START') {
          this.detectEnd(i + 1, condition, action);
        }
        return 1;
      });
    };

    Rewriter.prototype.matchTags = function() {
      var fuzz, i, j, pattern, _i, _ref, _ref1;
      i = arguments[0], pattern = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
      fuzz = 0;
      for (j = _i = 0, _ref = pattern.length; 0 <= _ref ? _i < _ref : _i > _ref; j = 0 <= _ref ? ++_i : --_i) {
        while (this.tag(i + j + fuzz) === 'HERECOMMENT') {
          fuzz += 2;
        }
        if (pattern[j] == null) {
          continue;
        }
        if (typeof pattern[j] === 'string') {
          pattern[j] = [pattern[j]];
        }
        if (_ref1 = this.tag(i + j + fuzz), __indexOf.call(pattern[j], _ref1) < 0) {
          return false;
        }
      }
      return true;
    };

    Rewriter.prototype.looksObjectish = function(j) {
      return this.matchTags(j, '@', null, ':') || this.matchTags(j, null, ':');
    };

    Rewriter.prototype.findTagsBackwards = function(i, tags) {
      var backStack, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
      backStack = [];
      while (i >= 0 && (backStack.length || (_ref2 = this.tag(i), __indexOf.call(tags, _ref2) < 0) && ((_ref3 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref3) < 0) || this.tokens[i].generated) && (_ref4 = this.tag(i), __indexOf.call(LINEBREAKS, _ref4) < 0))) {
        if (_ref = this.tag(i), __indexOf.call(EXPRESSION_END, _ref) >= 0) {
          backStack.push(this.tag(i));
        }
        if ((_ref1 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref1) >= 0) && backStack.length) {
          backStack.pop();
        }
        i -= 1;
      }
      return _ref5 = this.tag(i), __indexOf.call(tags, _ref5) >= 0;
    };

    Rewriter.prototype.addImplicitBracesAndParens = function() {
      var stack;
      stack = [];
      return this.scanTokens(function(token, i, tokens) {
        var endImplicitCall, endImplicitObject, forward, inImplicit, inImplicitCall, inImplicitControl, inImplicitObject, newLine, nextTag, offset, prevTag, prevToken, ret, s, sameLine, stackIdx, stackTag, stackTop, startIdx, startImplicitCall, startImplicitObject, startsLine, tag, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
        tag = token[0];
        prevTag = (prevToken = i > 0 ? tokens[i - 1] : [])[0];
        nextTag = (i < tokens.length - 1 ? tokens[i + 1] : [])[0];
        stackTop = function() {
          return stack[stack.length - 1];
        };
        startIdx = i;
        forward = function(n) {
          return i - startIdx + n;
        };
        inImplicit = function() {
          var _ref, _ref1;
          return (_ref = stackTop()) != null ? (_ref1 = _ref[2]) != null ? _ref1.ours : void 0 : void 0;
        };
        inImplicitCall = function() {
          var _ref;
          return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '(';
        };
        inImplicitObject = function() {
          var _ref;
          return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '{';
        };
        inImplicitControl = function() {
          var _ref;
          return inImplicit && ((_ref = stackTop()) != null ? _ref[0] : void 0) === 'CONTROL';
        };
        startImplicitCall = function(j) {
          var idx;
          idx = j != null ? j : i;
          stack.push([
            '(', idx, {
              ours: true
            }
          ]);
          tokens.splice(idx, 0, generate('CALL_START', '('));
          if (j == null) {
            return i += 1;
          }
        };
        endImplicitCall = function() {
          stack.pop();
          tokens.splice(i, 0, generate('CALL_END', ')'));
          return i += 1;
        };
        startImplicitObject = function(j, startsLine) {
          var idx;
          if (startsLine == null) {
            startsLine = true;
          }
          idx = j != null ? j : i;
          stack.push([
            '{', idx, {
              sameLine: true,
              startsLine: startsLine,
              ours: true
            }
          ]);
          tokens.splice(idx, 0, generate('{', generate(new String('{')), token));
          if (j == null) {
            return i += 1;
          }
        };
        endImplicitObject = function(j) {
          j = j != null ? j : i;
          stack.pop();
          tokens.splice(j, 0, generate('}', '}', token));
          return i += 1;
        };
        if (inImplicitCall() && (tag === 'IF' || tag === 'TRY' || tag === 'FINALLY' || tag === 'CATCH' || tag === 'CLASS' || tag === 'SWITCH')) {
          stack.push([
            'CONTROL', i, {
              ours: true
            }
          ]);
          return forward(1);
        }
        if (tag === 'INDENT' && inImplicit()) {
          if (prevTag !== '=>' && prevTag !== '->' && prevTag !== '[' && prevTag !== '(' && prevTag !== ',' && prevTag !== '{' && prevTag !== 'TRY' && prevTag !== 'ELSE' && prevTag !== '=') {
            while (inImplicitCall()) {
              endImplicitCall();
            }
          }
          if (inImplicitControl()) {
            stack.pop();
          }
          stack.push([tag, i]);
          return forward(1);
        }
        if (__indexOf.call(EXPRESSION_START, tag) >= 0) {
          stack.push([tag, i]);
          return forward(1);
        }
        if (__indexOf.call(EXPRESSION_END, tag) >= 0) {
          while (inImplicit()) {
            if (inImplicitCall()) {
              endImplicitCall();
            } else if (inImplicitObject()) {
              endImplicitObject();
            } else {
              stack.pop();
            }
          }
          stack.pop();
        }
        if ((__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && token.spaced && !token.stringEnd || tag === '?' && i > 0 && !tokens[i - 1].spaced) && (__indexOf.call(IMPLICIT_CALL, nextTag) >= 0 || __indexOf.call(IMPLICIT_UNSPACED_CALL, nextTag) >= 0 && !((_ref = tokens[i + 1]) != null ? _ref.spaced : void 0) && !((_ref1 = tokens[i + 1]) != null ? _ref1.newLine : void 0))) {
          if (tag === '?') {
            tag = token[0] = 'FUNC_EXIST';
          }
          startImplicitCall(i + 1);
          ret = forward(2);
          return ret;
        }
        if (__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && this.matchTags(i + 1, 'INDENT', null, ':') && !this.findTagsBackwards(i, ['CLASS', 'EXTENDS', 'IF', 'CATCH', 'SWITCH', 'LEADING_WHEN', 'FOR', 'WHILE', 'UNTIL'])) {
          startImplicitCall(i + 1);
          stack.push(['INDENT', i + 2]);
          return forward(3);
        }
        if (tag === ':') {
          if (this.tag(i - 2) === '@') {
            s = i - 2;
          } else {
            s = i - 1;
          }
          while (this.tag(s - 2) === 'HERECOMMENT') {
            s -= 2;
          }
          this.insideForDeclaration = nextTag === 'FOR';
          startsLine = s === 0 || (_ref2 = this.tag(s - 1), __indexOf.call(LINEBREAKS, _ref2) >= 0) || tokens[s - 1].newLine;
          if (stackTop()) {
            _ref3 = stackTop(), stackTag = _ref3[0], stackIdx = _ref3[1];
            if ((stackTag === '{' || stackTag === 'INDENT' && this.tag(stackIdx - 1) === '{') && (startsLine || this.tag(s - 1) === ',' || this.tag(s - 1) === '{')) {
              return forward(1);
            }
          }
          startImplicitObject(s, !!startsLine);
          return forward(2);
        }
        if (inImplicitObject() && __indexOf.call(LINEBREAKS, tag) >= 0) {
          stackTop()[2].sameLine = false;
        }
        newLine = prevTag === 'OUTDENT' || prevToken.newLine;
        if (__indexOf.call(IMPLICIT_END, tag) >= 0 || __indexOf.call(CALL_CLOSERS, tag) >= 0 && newLine) {
          while (inImplicit()) {
            _ref4 = stackTop(), stackTag = _ref4[0], stackIdx = _ref4[1], (_ref5 = _ref4[2], sameLine = _ref5.sameLine, startsLine = _ref5.startsLine);
            if (inImplicitCall() && prevTag !== ',') {
              endImplicitCall();
            } else if (inImplicitObject() && !this.insideForDeclaration && sameLine && tag !== 'TERMINATOR' && prevTag !== ':' && endImplicitObject()) {

            } else if (inImplicitObject() && tag === 'TERMINATOR' && prevTag !== ',' && !(startsLine && this.looksObjectish(i + 1))) {
              endImplicitObject();
            } else {
              break;
            }
          }
        }
        if (tag === ',' && !this.looksObjectish(i + 1) && inImplicitObject() && !this.insideForDeclaration && (nextTag !== 'TERMINATOR' || !this.looksObjectish(i + 2))) {
          offset = nextTag === 'OUTDENT' ? 1 : 0;
          while (inImplicitObject()) {
            endImplicitObject(i + offset);
          }
        }
        return forward(1);
      });
    };

    Rewriter.prototype.addLocationDataToGeneratedTokens = function() {
      return this.scanTokens(function(token, i, tokens) {
        var column, line, nextLocation, prevLocation, _ref, _ref1;
        if (token[2]) {
          return 1;
        }
        if (!(token.generated || token.explicit)) {
          return 1;
        }
        if (token[0] === '{' && (nextLocation = (_ref = tokens[i + 1]) != null ? _ref[2] : void 0)) {
          line = nextLocation.first_line, column = nextLocation.first_column;
        } else if (prevLocation = (_ref1 = tokens[i - 1]) != null ? _ref1[2] : void 0) {
          line = prevLocation.last_line, column = prevLocation.last_column;
        } else {
          line = column = 0;
        }
        token[2] = {
          first_line: line,
          first_column: column,
          last_line: line,
          last_column: column
        };
        return 1;
      });
    };

    Rewriter.prototype.normalizeLines = function() {
      var action, condition, indent, outdent, starter;
      starter = indent = outdent = null;
      condition = function(token, i) {
        var _ref, _ref1, _ref2, _ref3;
        return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'TERMINATOR' && (_ref1 = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref1) >= 0)) && !(token[0] === 'ELSE' && starter !== 'THEN') && !(((_ref2 = token[0]) === 'CATCH' || _ref2 === 'FINALLY') && (starter === '->' || starter === '=>')) || (_ref3 = token[0], __indexOf.call(CALL_CLOSERS, _ref3) >= 0) && this.tokens[i - 1].newLine;
      };
      action = function(token, i) {
        return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent);
      };
      return this.scanTokens(function(token, i, tokens) {
        var j, tag, _i, _ref, _ref1, _ref2;
        tag = token[0];
        if (tag === 'TERMINATOR') {
          if (this.tag(i + 1) === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') {
            tokens.splice.apply(tokens, [i, 1].concat(__slice.call(this.indentation())));
            return 1;
          }
          if (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0) {
            tokens.splice(i, 1);
            return 0;
          }
        }
        if (tag === 'CATCH') {
          for (j = _i = 1; _i <= 2; j = ++_i) {
            if (!((_ref1 = this.tag(i + j)) === 'OUTDENT' || _ref1 === 'TERMINATOR' || _ref1 === 'FINALLY')) {
              continue;
            }
            tokens.splice.apply(tokens, [i + j, 0].concat(__slice.call(this.indentation())));
            return 2 + j;
          }
        }
        if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
          starter = tag;
          _ref2 = this.indentation(tokens[i]), indent = _ref2[0], outdent = _ref2[1];
          if (starter === 'THEN') {
            indent.fromThen = true;
          }
          tokens.splice(i + 1, 0, indent);
          this.detectEnd(i + 2, condition, action);
          if (tag === 'THEN') {
            tokens.splice(i, 1);
          }
          return 1;
        }
        return 1;
      });
    };

    Rewriter.prototype.tagPostfixConditionals = function() {
      var action, condition, original;
      original = null;
      condition = function(token, i) {
        var prevTag, tag;
        tag = token[0];
        prevTag = this.tokens[i - 1][0];
        return tag === 'TERMINATOR' || (tag === 'INDENT' && __indexOf.call(SINGLE_LINERS, prevTag) < 0);
      };
      action = function(token, i) {
        if (token[0] !== 'INDENT' || (token.generated && !token.fromThen)) {
          return original[0] = 'POST_' + original[0];
        }
      };
      return this.scanTokens(function(token, i) {
        if (token[0] !== 'IF') {
          return 1;
        }
        original = token;
        this.detectEnd(i + 1, condition, action);
        return 1;
      });
    };

    Rewriter.prototype.indentation = function(origin) {
      var indent, outdent;
      indent = ['INDENT', 2];
      outdent = ['OUTDENT', 2];
      if (origin) {
        indent.generated = outdent.generated = true;
        indent.origin = outdent.origin = origin;
      } else {
        indent.explicit = outdent.explicit = true;
      }
      return [indent, outdent];
    };

    Rewriter.prototype.generate = generate;

    Rewriter.prototype.tag = function(i) {
      var _ref;
      return (_ref = this.tokens[i]) != null ? _ref[0] : void 0;
    };

    return Rewriter;

  })();

  BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END']];

  exports.INVERSES = INVERSES = {};

  EXPRESSION_START = [];

  EXPRESSION_END = [];

  for (_i = 0, _len = BALANCED_PAIRS.length; _i < _len; _i++) {
    _ref = BALANCED_PAIRS[_i], left = _ref[0], rite = _ref[1];
    EXPRESSION_START.push(INVERSES[rite] = left);
    EXPRESSION_END.push(INVERSES[left] = rite);
  }

  EXPRESSION_CLOSE = ['CATCH', 'THEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);

  IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];

  IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'NULL', 'UNDEFINED', 'UNARY', 'YIELD', 'UNARY_MATH', 'SUPER', 'THROW', '@', '->', '=>', '[', '(', '{', '--', '++'];

  IMPLICIT_UNSPACED_CALL = ['+', '-'];

  IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR'];

  SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN'];

  SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN'];

  LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT'];

  CALL_CLOSERS = ['.', '?.', '::', '?::'];

  IMPLICIT_FUNC.push('DEFER');

  IMPLICIT_CALL.push('DEFER');

  IMPLICIT_END.push('AWAIT');

}).call(this);

},{}],10:[function(_dereq_,module,exports){
// Generated by IcedCoffeeScript 1.8.0-c
(function() {
  var Scope, extend, iced, last, _ref;

  _ref = _dereq_('./helpers'), extend = _ref.extend, last = _ref.last;

  iced = _dereq_('iced-runtime');

  exports.Scope = Scope = (function() {
    Scope.root = null;

    function Scope(parent, expressions, method) {
      this.parent = parent;
      this.expressions = expressions;
      this.method = method;
      this.variables = [
        {
          name: 'arguments',
          type: 'arguments'
        }
      ];
      this.positions = {};
      if (!this.parent) {
        Scope.root = this;
      }
    }

    Scope.prototype.add = function(name, type, immediate) {
      if (this.shared && !immediate) {
        return this.parent.add(name, type, immediate);
      }
      if (Object.prototype.hasOwnProperty.call(this.positions, name)) {
        return this.variables[this.positions[name]].type = type;
      } else {
        return this.positions[name] = this.variables.push({
          name: name,
          type: type
        }) - 1;
      }
    };

    Scope.prototype.namedMethod = function() {
      var _ref1;
      if (((_ref1 = this.method) != null ? _ref1.name : void 0) || !this.parent) {
        return this.method;
      }
      return this.parent.namedMethod();
    };

    Scope.prototype.find = function(name) {
      if (this.check(name)) {
        return true;
      }
      this.add(name, 'var');
      return false;
    };

    Scope.prototype.parameter = function(name) {
      if (this.shared && this.parent.check(name, true)) {
        return;
      }
      return this.add(name, 'param');
    };

    Scope.prototype.check = function(name) {
      var _ref1;
      return !!(this.type(name) || ((_ref1 = this.parent) != null ? _ref1.check(name) : void 0));
    };

    Scope.prototype.temporary = function(name, index) {
      if (name.length > 1) {
        return '_' + name + (index > 1 ? index - 1 : '');
      } else {
        return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a');
      }
    };

    Scope.prototype.type = function(name) {
      var v, _i, _len, _ref1;
      _ref1 = this.variables;
      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
        v = _ref1[_i];
        if (v.name === name) {
          return v.type;
        }
      }
      return null;
    };

    Scope.prototype.freeVariable = function(name, reserve) {
      var index, temp;
      if (reserve == null) {
        reserve = true;
      }
      index = 0;
      while (this.check((temp = this.temporary(name, index)))) {
        index++;
      }
      if (reserve) {
        this.add(temp, 'var', true);
      }
      return temp;
    };

    Scope.prototype.assign = function(name, value) {
      this.add(name, {
        value: value,
        assigned: true
      }, true);
      return this.hasAssignments = true;
    };

    Scope.prototype.hasDeclarations = function() {
      return !!this.declaredVariables().length;
    };

    Scope.prototype.declaredVariables = function() {
      var realVars, tempVars, v, _i, _len, _ref1;
      realVars = [];
      tempVars = [];
      _ref1 = this.variables;
      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
        v = _ref1[_i];
        if ((v.type === 'var') || (v.type === 'param' && v.name === iced["const"].k)) {
          (v.name.charAt(0) === '_' ? tempVars : realVars).push(v.name);
        }
      }
      return realVars.sort().concat(tempVars.sort());
    };

    Scope.prototype.assignedVariables = function() {
      var v, _i, _len, _ref1, _results;
      _ref1 = this.variables;
      _results = [];
      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
        v = _ref1[_i];
        if (v.type.assigned) {
          _results.push("" + v.name + " = " + v.type.value);
        }
      }
      return _results;
    };

    return Scope;

  })();

}).call(this);

},{"./helpers":3,"iced-runtime":19}],11:[function(_dereq_,module,exports){
// Generated by IcedCoffeeScript 1.8.0-c
(function() {
  var LineMap, SourceMap;

  LineMap = (function() {
    function LineMap(line) {
      this.line = line;
      this.columns = [];
    }

    LineMap.prototype.add = function(column, _arg, options) {
      var sourceColumn, sourceLine;
      sourceLine = _arg[0], sourceColumn = _arg[1];
      if (options == null) {
        options = {};
      }
      if (this.columns[column] && options.noReplace) {
        return;
      }
      return this.columns[column] = {
        line: this.line,
        column: column,
        sourceLine: sourceLine,
        sourceColumn: sourceColumn
      };
    };

    LineMap.prototype.sourceLocation = function(column) {
      var mapping;
      while (!((mapping = this.columns[column]) || (column <= 0))) {
        column--;
      }
      return mapping && [mapping.sourceLine, mapping.sourceColumn];
    };

    return LineMap;

  })();

  SourceMap = (function() {
    var BASE64_CHARS, VLQ_CONTINUATION_BIT, VLQ_SHIFT, VLQ_VALUE_MASK;

    function SourceMap() {
      this.lines = [];
    }

    SourceMap.prototype.add = function(sourceLocation, generatedLocation, options) {
      var column, line, lineMap, _base;
      if (options == null) {
        options = {};
      }
      line = generatedLocation[0], column = generatedLocation[1];
      lineMap = ((_base = this.lines)[line] || (_base[line] = new LineMap(line)));
      return lineMap.add(column, sourceLocation, options);
    };

    SourceMap.prototype.sourceLocation = function(_arg) {
      var column, line, lineMap;
      line = _arg[0], column = _arg[1];
      while (!((lineMap = this.lines[line]) || (line <= 0))) {
        line--;
      }
      return lineMap && lineMap.sourceLocation(column);
    };

    SourceMap.prototype.generate = function(options, code) {
      var buffer, lastColumn, lastSourceColumn, lastSourceLine, lineMap, lineNumber, mapping, needComma, v3, writingline, _i, _j, _len, _len1, _ref, _ref1;
      if (options == null) {
        options = {};
      }
      if (code == null) {
        code = null;
      }
      writingline = 0;
      lastColumn = 0;
      lastSourceLine = 0;
      lastSourceColumn = 0;
      needComma = false;
      buffer = "";
      _ref = this.lines;
      for (lineNumber = _i = 0, _len = _ref.length; _i < _len; lineNumber = ++_i) {
        lineMap = _ref[lineNumber];
        if (lineMap) {
          _ref1 = lineMap.columns;
          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
            mapping = _ref1[_j];
            if (!(mapping)) {
              continue;
            }
            while (writingline < mapping.line) {
              lastColumn = 0;
              needComma = false;
              buffer += ";";
              writingline++;
            }
            if (needComma) {
              buffer += ",";
              needComma = false;
            }
            buffer += this.encodeVlq(mapping.column - lastColumn);
            lastColumn = mapping.column;
            buffer += this.encodeVlq(0);
            buffer += this.encodeVlq(mapping.sourceLine - lastSourceLine);
            lastSourceLine = mapping.sourceLine;
            buffer += this.encodeVlq(mapping.sourceColumn - lastSourceColumn);
            lastSourceColumn = mapping.sourceColumn;
            needComma = true;
          }
        }
      }
      v3 = {
        version: 3,
        file: options.generatedFile || '',
        sourceRoot: options.sourceRoot || '',
        sources: options.sourceFiles || [''],
        names: [],
        mappings: buffer
      };
      if (options.inline) {
        v3.sourcesContent = [code];
      }
      return JSON.stringify(v3, null, 2);
    };

    VLQ_SHIFT = 5;

    VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;

    VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;

    SourceMap.prototype.encodeVlq = function(value) {
      var answer, nextChunk, signBit, valueToEncode;
      answer = '';
      signBit = value < 0 ? 1 : 0;
      valueToEncode = (Math.abs(value) << 1) + signBit;
      while (valueToEncode || !answer) {
        nextChunk = valueToEncode & VLQ_VALUE_MASK;
        valueToEncode = valueToEncode >> VLQ_SHIFT;
        if (valueToEncode) {
          nextChunk |= VLQ_CONTINUATION_BIT;
        }
        answer += this.encodeBase64(nextChunk);
      }
      return answer;
    };

    BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

    SourceMap.prototype.encodeBase64 = function(value) {
      return BASE64_CHARS[value] || (function() {
        throw new Error("Cannot Base64 encode value: " + value);
      })();
    };

    return SourceMap;

  })();

  exports.SourceMap = SourceMap;

}).call(this);

},{}],12:[function(_dereq_,module,exports){

},{}],13:[function(_dereq_,module,exports){
(function (process){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

// resolves . and .. elements in a path array with directory names there
// must be no slashes, empty elements, or device names (c:\) in the array
// (so also no leading and trailing slashes - it does not distinguish
// relative and absolute paths)
function normalizeArray(parts, allowAboveRoot) {
  // if the path tries to go above the root, `up` ends up > 0
  var up = 0;
  for (var i = parts.length - 1; i >= 0; i--) {
    var last = parts[i];
    if (last === '.') {
      parts.splice(i, 1);
    } else if (last === '..') {
      parts.splice(i, 1);
      up++;
    } else if (up) {
      parts.splice(i, 1);
      up--;
    }
  }

  // if the path is allowed to go above the root, restore leading ..s
  if (allowAboveRoot) {
    for (; up--; up) {
      parts.unshift('..');
    }
  }

  return parts;
}

// Split a filename into [root, dir, basename, ext], unix version
// 'root' is just a slash, or nothing.
var splitPathRe =
    /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
var splitPath = function(filename) {
  return splitPathRe.exec(filename).slice(1);
};

// path.resolve([from ...], to)
// posix version
exports.resolve = function() {
  var resolvedPath = '',
      resolvedAbsolute = false;

  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
    var path = (i >= 0) ? arguments[i] : process.cwd();

    // Skip empty and invalid entries
    if (typeof path !== 'string') {
      throw new TypeError('Arguments to path.resolve must be strings');
    } else if (!path) {
      continue;
    }

    resolvedPath = path + '/' + resolvedPath;
    resolvedAbsolute = path.charAt(0) === '/';
  }

  // At this point the path should be resolved to a full absolute path, but
  // handle relative paths to be safe (might happen when process.cwd() fails)

  // Normalize the path
  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
    return !!p;
  }), !resolvedAbsolute).join('/');

  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
};

// path.normalize(path)
// posix version
exports.normalize = function(path) {
  var isAbsolute = exports.isAbsolute(path),
      trailingSlash = substr(path, -1) === '/';

  // Normalize the path
  path = normalizeArray(filter(path.split('/'), function(p) {
    return !!p;
  }), !isAbsolute).join('/');

  if (!path && !isAbsolute) {
    path = '.';
  }
  if (path && trailingSlash) {
    path += '/';
  }

  return (isAbsolute ? '/' : '') + path;
};

// posix version
exports.isAbsolute = function(path) {
  return path.charAt(0) === '/';
};

// posix version
exports.join = function() {
  var paths = Array.prototype.slice.call(arguments, 0);
  return exports.normalize(filter(paths, function(p, index) {
    if (typeof p !== 'string') {
      throw new TypeError('Arguments to path.join must be strings');
    }
    return p;
  }).join('/'));
};


// path.relative(from, to)
// posix version
exports.relative = function(from, to) {
  from = exports.resolve(from).substr(1);
  to = exports.resolve(to).substr(1);

  function trim(arr) {
    var start = 0;
    for (; start < arr.length; start++) {
      if (arr[start] !== '') break;
    }

    var end = arr.length - 1;
    for (; end >= 0; end--) {
      if (arr[end] !== '') break;
    }

    if (start > end) return [];
    return arr.slice(start, end - start + 1);
  }

  var fromParts = trim(from.split('/'));
  var toParts = trim(to.split('/'));

  var length = Math.min(fromParts.length, toParts.length);
  var samePartsLength = length;
  for (var i = 0; i < length; i++) {
    if (fromParts[i] !== toParts[i]) {
      samePartsLength = i;
      break;
    }
  }

  var outputParts = [];
  for (var i = samePartsLength; i < fromParts.length; i++) {
    outputParts.push('..');
  }

  outputParts = outputParts.concat(toParts.slice(samePartsLength));

  return outputParts.join('/');
};

exports.sep = '/';
exports.delimiter = ':';

exports.dirname = function(path) {
  var result = splitPath(path),
      root = result[0],
      dir = result[1];

  if (!root && !dir) {
    // No dirname whatsoever
    return '.';
  }

  if (dir) {
    // It has a dirname, strip trailing slash
    dir = dir.substr(0, dir.length - 1);
  }

  return root + dir;
};


exports.basename = function(path, ext) {
  var f = splitPath(path)[2];
  // TODO: make this comparison case-insensitive on windows?
  if (ext && f.substr(-1 * ext.length) === ext) {
    f = f.substr(0, f.length - ext.length);
  }
  return f;
};


exports.extname = function(path) {
  return splitPath(path)[3];
};

function filter (xs, f) {
    if (xs.filter) return xs.filter(f);
    var res = [];
    for (var i = 0; i < xs.length; i++) {
        if (f(xs[i], i, xs)) res.push(xs[i]);
    }
    return res;
}

// String.prototype.substr - negative index don't work in IE8
var substr = 'ab'.substr(-1) === 'b'
    ? function (str, start, len) { return str.substr(start, len) }
    : function (str, start, len) {
        if (start < 0) start = str.length + start;
        return str.substr(start, len);
    }
;

}).call(this,_dereq_("FWaASH"))
},{"FWaASH":14}],14:[function(_dereq_,module,exports){
// shim for using process in browser

var process = module.exports = {};

process.nextTick = (function () {
    var canSetImmediate = typeof window !== 'undefined'
    && window.setImmediate;
    var canPost = typeof window !== 'undefined'
    && window.postMessage && window.addEventListener
    ;

    if (canSetImmediate) {
        return function (f) { return window.setImmediate(f) };
    }

    if (canPost) {
        var queue = [];
        window.addEventListener('message', function (ev) {
            var source = ev.source;
            if ((source === window || source === null) && ev.data === 'process-tick') {
                ev.stopPropagation();
                if (queue.length > 0) {
                    var fn = queue.shift();
                    fn();
                }
            }
        }, true);

        return function nextTick(fn) {
            queue.push(fn);
            window.postMessage('process-tick', '*');
        };
    }

    return function nextTick(fn) {
        setTimeout(fn, 0);
    };
})();

process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];

function noop() {}

process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;

process.binding = function (name) {
    throw new Error('process.binding is not supported');
}

// TODO(shtylman)
process.cwd = function () { return '/' };
process.chdir = function (dir) {
    throw new Error('process.chdir is not supported');
};

},{}],15:[function(_dereq_,module,exports){
var indexOf = _dereq_('indexof');

var Object_keys = function (obj) {
    if (Object.keys) return Object.keys(obj)
    else {
        var res = [];
        for (var key in obj) res.push(key)
        return res;
    }
};

var forEach = function (xs, fn) {
    if (xs.forEach) return xs.forEach(fn)
    else for (var i = 0; i < xs.length; i++) {
        fn(xs[i], i, xs);
    }
};

var defineProp = (function() {
    try {
        Object.defineProperty({}, '_', {});
        return function(obj, name, value) {
            Object.defineProperty(obj, name, {
                writable: true,
                enumerable: false,
                configurable: true,
                value: value
            })
        };
    } catch(e) {
        return function(obj, name, value) {
            obj[name] = value;
        };
    }
}());

var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',
'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',
'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',
'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',
'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];

function Context() {}
Context.prototype = {};

var Script = exports.Script = function NodeScript (code) {
    if (!(this instanceof Script)) return new Script(code);
    this.code = code;
};

Script.prototype.runInContext = function (context) {
    if (!(context instanceof Context)) {
        throw new TypeError("needs a 'context' argument.");
    }
    
    var iframe = document.createElement('iframe');
    if (!iframe.style) iframe.style = {};
    iframe.style.display = 'none';
    
    document.body.appendChild(iframe);
    
    var win = iframe.contentWindow;
    var wEval = win.eval, wExecScript = win.execScript;

    if (!wEval && wExecScript) {
        // win.eval() magically appears when this is called in IE:
        wExecScript.call(win, 'null');
        wEval = win.eval;
    }
    
    forEach(Object_keys(context), function (key) {
        win[key] = context[key];
    });
    forEach(globals, function (key) {
        if (context[key]) {
            win[key] = context[key];
        }
    });
    
    var winKeys = Object_keys(win);

    var res = wEval.call(win, this.code);
    
    forEach(Object_keys(win), function (key) {
        // Avoid copying circular objects like `top` and `window` by only
        // updating existing context properties or new properties in the `win`
        // that was only introduced after the eval.
        if (key in context || indexOf(winKeys, key) === -1) {
            context[key] = win[key];
        }
    });

    forEach(globals, function (key) {
        if (!(key in context)) {
            defineProp(context, key, win[key]);
        }
    });
    
    document.body.removeChild(iframe);
    
    return res;
};

Script.prototype.runInThisContext = function () {
    return eval(this.code); // maybe...
};

Script.prototype.runInNewContext = function (context) {
    var ctx = Script.createContext(context);
    var res = this.runInContext(ctx);

    forEach(Object_keys(ctx), function (key) {
        context[key] = ctx[key];
    });

    return res;
};

forEach(Object_keys(Script.prototype), function (name) {
    exports[name] = Script[name] = function (code) {
        var s = Script(code);
        return s[name].apply(s, [].slice.call(arguments, 1));
    };
});

exports.createScript = function (code) {
    return exports.Script(code);
};

exports.createContext = Script.createContext = function (context) {
    var copy = new Context();
    if(typeof context === 'object') {
        forEach(Object_keys(context), function (key) {
            copy[key] = context[key];
        });
    }
    return copy;
};

},{"indexof":16}],16:[function(_dereq_,module,exports){

var indexOf = [].indexOf;

module.exports = function(arr, obj){
  if (indexOf) return arr.indexOf(obj);
  for (var i = 0; i < arr.length; ++i) {
    if (arr[i] === obj) return i;
  }
  return -1;
};
},{}],17:[function(_dereq_,module,exports){
// Generated by IcedCoffeeScript 1.7.1-b
(function() {
  module.exports = {
    k: "__iced_k",
    k_noop: "__iced_k_noop",
    param: "__iced_p_",
    ns: "iced",
    runtime: "runtime",
    Deferrals: "Deferrals",
    deferrals: "__iced_deferrals",
    fulfill: "_fulfill",
    b_while: "_break",
    t_while: "_while",
    c_while: "_continue",
    n_while: "_next",
    n_arg: "__iced_next_arg",
    defer_method: "defer",
    slot: "__slot",
    assign_fn: "assign_fn",
    autocb: "autocb",
    retslot: "ret",
    trace: "__iced_trace",
    passed_deferral: "__iced_passed_deferral",
    findDeferral: "findDeferral",
    lineno: "lineno",
    parent: "parent",
    filename: "filename",
    funcname: "funcname",
    catchExceptions: 'catchExceptions',
    runtime_modes: ["node", "inline", "window", "none", "browserify", "interp"],
    trampoline: "trampoline",
    context: "context",
    defer_arg: "__iced_defer_"
  };

}).call(this);

},{}],18:[function(_dereq_,module,exports){
// Generated by IcedCoffeeScript 1.7.1-b
(function() {
  var C, Pipeliner, iced, __iced_k, __iced_k_noop, _iand, _ior, _timeout,
    __slice = [].slice;

  __iced_k = __iced_k_noop = function() {};

  C = _dereq_('./const');

  exports.iced = iced = _dereq_('./runtime');

  _timeout = function(cb, t, res, tmp) {
    var arr, rv, which, ___iced_passed_deferral, __iced_deferrals, __iced_k;
    __iced_k = __iced_k_noop;
    ___iced_passed_deferral = iced.findDeferral(arguments);
    rv = new iced.Rendezvous;
    tmp[0] = rv.id(true).defer({
      assign_fn: (function(_this) {
        return function() {
          return function() {
            return arr = __slice.call(arguments, 0);
          };
        };
      })(this)(),
      lineno: 20,
      context: __iced_deferrals
    });
    setTimeout(rv.id(false).defer({
      lineno: 21,
      context: __iced_deferrals
    }), t);
    (function(_this) {
      return (function(__iced_k) {
        __iced_deferrals = new iced.Deferrals(__iced_k, {
          parent: ___iced_passed_deferral,
          filename: "/Users/max/src/iced/iced-runtime/src/library.iced"
        });
        rv.wait(__iced_deferrals.defer({
          assign_fn: (function() {
            return function() {
              return which = arguments[0];
            };
          })(),
          lineno: 22
        }));
        __iced_deferrals._fulfill();
      });
    })(this)((function(_this) {
      return function() {
        if (res) {
          res[0] = which;
        }
        return cb.apply(null, arr);
      };
    })(this));
  };

  exports.timeout = function(cb, t, res) {
    var tmp;
    tmp = [];
    _timeout(cb, t, res, tmp);
    return tmp[0];
  };

  _iand = function(cb, res, tmp) {
    var ok, ___iced_passed_deferral, __iced_deferrals, __iced_k;
    __iced_k = __iced_k_noop;
    ___iced_passed_deferral = iced.findDeferral(arguments);
    (function(_this) {
      return (function(__iced_k) {
        __iced_deferrals = new iced.Deferrals(__iced_k, {
          parent: ___iced_passed_deferral,
          filename: "/Users/max/src/iced/iced-runtime/src/library.iced"
        });
        tmp[0] = __iced_deferrals.defer({
          assign_fn: (function() {
            return function() {
              return ok = arguments[0];
            };
          })(),
          lineno: 39
        });
        __iced_deferrals._fulfill();
      });
    })(this)((function(_this) {
      return function() {
        if (!ok) {
          res[0] = false;
        }
        return cb();
      };
    })(this));
  };

  exports.iand = function(cb, res) {
    var tmp;
    tmp = [];
    _iand(cb, res, tmp);
    return tmp[0];
  };

  _ior = function(cb, res, tmp) {
    var ok, ___iced_passed_deferral, __iced_deferrals, __iced_k;
    __iced_k = __iced_k_noop;
    ___iced_passed_deferral = iced.findDeferral(arguments);
    (function(_this) {
      return (function(__iced_k) {
        __iced_deferrals = new iced.Deferrals(__iced_k, {
          parent: ___iced_passed_deferral,
          filename: "/Users/max/src/iced/iced-runtime/src/library.iced"
        });
        tmp[0] = __iced_deferrals.defer({
          assign_fn: (function() {
            return function() {
              return ok = arguments[0];
            };
          })(),
          lineno: 58
        });
        __iced_deferrals._fulfill();
      });
    })(this)((function(_this) {
      return function() {
        if (ok) {
          res[0] = true;
        }
        return cb();
      };
    })(this));
  };

  exports.ior = function(cb, res) {
    var tmp;
    tmp = [];
    _ior(cb, res, tmp);
    return tmp[0];
  };

  exports.Pipeliner = Pipeliner = (function() {
    function Pipeliner(window, delay) {
      this.window = window || 1;
      this.delay = delay || 0;
      this.queue = [];
      this.n_out = 0;
      this.cb = null;
      this[C.deferrals] = this;
      this["defer"] = this._defer;
    }

    Pipeliner.prototype.waitInQueue = function(cb) {
      var ___iced_passed_deferral, __iced_deferrals, __iced_k;
      __iced_k = __iced_k_noop;
      ___iced_passed_deferral = iced.findDeferral(arguments);
      (function(_this) {
        return (function(__iced_k) {
          var _results, _while;
          _results = [];
          _while = function(__iced_k) {
            var _break, _continue, _next;
            _break = function() {
              return __iced_k(_results);
            };
            _continue = function() {
              return iced.trampoline(function() {
                return _while(__iced_k);
              });
            };
            _next = function(__iced_next_arg) {
              _results.push(__iced_next_arg);
              return _continue();
            };
            if (!(_this.n_out >= _this.window)) {
              return _break();
            } else {
              (function(__iced_k) {
                __iced_deferrals = new iced.Deferrals(__iced_k, {
                  parent: ___iced_passed_deferral,
                  filename: "/Users/max/src/iced/iced-runtime/src/library.iced",
                  funcname: "Pipeliner.waitInQueue"
                });
                _this.cb = __iced_deferrals.defer({
                  lineno: 100
                });
                __iced_deferrals._fulfill();
              })(_next);
            }
          };
          _while(__iced_k);
        });
      })(this)((function(_this) {
        return function() {
          _this.n_out++;
          (function(__iced_k) {
            if (_this.delay) {
              (function(__iced_k) {
                __iced_deferrals = new iced.Deferrals(__iced_k, {
                  parent: ___iced_passed_deferral,
                  filename: "/Users/max/src/iced/iced-runtime/src/library.iced",
                  funcname: "Pipeliner.waitInQueue"
                });
                setTimeout(__iced_deferrals.defer({
                  lineno: 108
                }), _this.delay);
                __iced_deferrals._fulfill();
              })(__iced_k);
            } else {
              return __iced_k();
            }
          })(function() {
            return cb();
          });
        };
      })(this));
    };

    Pipeliner.prototype.__defer = function(out, deferArgs) {
      var tmp, voidCb, ___iced_passed_deferral, __iced_deferrals, __iced_k;
      __iced_k = __iced_k_noop;
      ___iced_passed_deferral = iced.findDeferral(arguments);
      (function(_this) {
        return (function(__iced_k) {
          __iced_deferrals = new iced.Deferrals(__iced_k, {
            parent: ___iced_passed_deferral,
            filename: "/Users/max/src/iced/iced-runtime/src/library.iced",
            funcname: "Pipeliner.__defer"
          });
          voidCb = __iced_deferrals.defer({
            lineno: 122
          });
          out[0] = function() {
            var args, _ref;
            args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
            if ((_ref = deferArgs.assign_fn) != null) {
              _ref.apply(null, args);
            }
            return voidCb();
          };
          __iced_deferrals._fulfill();
        });
      })(this)((function(_this) {
        return function() {
          _this.n_out--;
          if (_this.cb) {
            tmp = _this.cb;
            _this.cb = null;
            return tmp();
          }
        };
      })(this));
    };

    Pipeliner.prototype._defer = function(deferArgs) {
      var tmp;
      tmp = [];
      this.__defer(tmp, deferArgs);
      return tmp[0];
    };

    Pipeliner.prototype.flush = function(autocb) {
      var ___iced_passed_deferral, __iced_k, _results, _while;
      __iced_k = autocb;
      ___iced_passed_deferral = iced.findDeferral(arguments);
      _results = [];
      _while = (function(_this) {
        var __iced_deferrals;
        return function(__iced_k) {
          var _break, _continue, _next;
          _break = function() {
            return __iced_k(_results);
          };
          _continue = function() {
            return iced.trampoline(function() {
              return _while(__iced_k);
            });
          };
          _next = function(__iced_next_arg) {
            _results.push(__iced_next_arg);
            return _continue();
          };
          if (!_this.n_out) {
            return _break();
          } else {
            (function(__iced_k) {
              __iced_deferrals = new iced.Deferrals(__iced_k, {
                parent: ___iced_passed_deferral,
                filename: "/Users/max/src/iced/iced-runtime/src/library.iced",
                funcname: "Pipeliner.flush"
              });
              _this.cb = __iced_deferrals.defer({
                lineno: 151
              });
              __iced_deferrals._fulfill();
            })(_next);
          }
        };
      })(this);
      _while(__iced_k);
    };

    return Pipeliner;

  })();

}).call(this);

},{"./const":17,"./runtime":20}],19:[function(_dereq_,module,exports){
// Generated by IcedCoffeeScript 1.7.1-b
(function() {
  var k, mod, mods, v, _i, _len;

  exports["const"] = _dereq_('./const');

  mods = [_dereq_('./runtime'), _dereq_('./library')];

  for (_i = 0, _len = mods.length; _i < _len; _i++) {
    mod = mods[_i];
    for (k in mod) {
      v = mod[k];
      exports[k] = v;
    }
  }

}).call(this);

},{"./const":17,"./library":18,"./runtime":20}],20:[function(_dereq_,module,exports){
(function (process){
// Generated by IcedCoffeeScript 1.7.1-b
(function() {
  var C, Deferrals, Rendezvous, exceptionHandler, findDeferral, make_defer_return, stackWalk, tick_counter, trampoline, warn, __active_trace, __c, _trace_to_string,
    __slice = [].slice;

  C = _dereq_('./const');

  make_defer_return = function(obj, defer_args, id, trace_template, multi) {
    var k, ret, trace, v;
    trace = {};
    for (k in trace_template) {
      v = trace_template[k];
      trace[k] = v;
    }
    trace[C.lineno] = defer_args != null ? defer_args[C.lineno] : void 0;
    ret = function() {
      var inner_args, o, _ref;
      inner_args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
      if (defer_args != null) {
        if ((_ref = defer_args.assign_fn) != null) {
          _ref.apply(null, inner_args);
        }
      }
      if (obj) {
        o = obj;
        if (!multi) {
          obj = null;
        }
        return o._fulfill(id, trace);
      } else {
        return warn("overused deferral at " + (_trace_to_string(trace)));
      }
    };
    ret[C.trace] = trace;
    return ret;
  };

  __c = 0;

  tick_counter = function(mod) {
    __c++;
    if ((__c % mod) === 0) {
      __c = 0;
      return true;
    } else {
      return false;
    }
  };

  __active_trace = null;

  _trace_to_string = function(tr) {
    var fn;
    fn = tr[C.funcname] || "<anonymous>";
    return "" + fn + " (" + tr[C.filename] + ":" + (tr[C.lineno] + 1) + ")";
  };

  warn = function(m) {
    return typeof console !== "undefined" && console !== null ? console.error("ICED warning: " + m) : void 0;
  };

  exports.trampoline = trampoline = function(fn) {
    if (!tick_counter(500)) {
      return fn();
    } else if (typeof process !== "undefined" && process !== null) {
      return process.nextTick(fn);
    } else {
      return setTimeout(fn);
    }
  };

  exports.Deferrals = Deferrals = (function() {
    function Deferrals(k, trace) {
      this.trace = trace;
      this.continuation = k;
      this.count = 1;
      this.ret = null;
    }

    Deferrals.prototype._call = function(trace) {
      var c;
      if (this.continuation) {
        __active_trace = trace;
        c = this.continuation;
        this.continuation = null;
        return c(this.ret);
      } else {
        return warn("Entered dead await at " + (_trace_to_string(trace)));
      }
    };

    Deferrals.prototype._fulfill = function(id, trace) {
      if (--this.count > 0) {

      } else {
        return trampoline(((function(_this) {
          return function() {
            return _this._call(trace);
          };
        })(this)));
      }
    };

    Deferrals.prototype.defer = function(args) {
      var self;
      this.count++;
      self = this;
      return make_defer_return(self, args, null, this.trace);
    };

    return Deferrals;

  })();

  exports.findDeferral = findDeferral = function(args) {
    var a, _i, _len;
    for (_i = 0, _len = args.length; _i < _len; _i++) {
      a = args[_i];
      if (a != null ? a[C.trace] : void 0) {
        return a;
      }
    }
    return null;
  };

  exports.Rendezvous = Rendezvous = (function() {
    var RvId;

    function Rendezvous() {
      this.completed = [];
      this.waiters = [];
      this.defer_id = 0;
    }

    RvId = (function() {
      function RvId(rv, id, multi) {
        this.rv = rv;
        this.id = id;
        this.multi = multi;
      }

      RvId.prototype.defer = function(defer_args) {
        return this.rv._defer_with_id(this.id, defer_args, this.multi);
      };

      return RvId;

    })();

    Rendezvous.prototype.wait = function(cb) {
      var x;
      if (this.completed.length) {
        x = this.completed.shift();
        return cb(x);
      } else {
        return this.waiters.push(cb);
      }
    };

    Rendezvous.prototype.defer = function(defer_args) {
      var id;
      id = this.defer_id++;
      return this._defer_with_id(id, defer_args);
    };

    Rendezvous.prototype.id = function(i, multi) {
      multi = !!multi;
      return new RvId(this, i, multi);
    };

    Rendezvous.prototype._fulfill = function(id, trace) {
      var cb;
      if (this.waiters.length) {
        cb = this.waiters.shift();
        return cb(id);
      } else {
        return this.completed.push(id);
      }
    };

    Rendezvous.prototype._defer_with_id = function(id, defer_args, multi) {
      this.count++;
      return make_defer_return(this, defer_args, id, {}, multi);
    };

    return Rendezvous;

  })();

  exports.stackWalk = stackWalk = function(cb) {
    var line, ret, tr, _ref;
    ret = [];
    tr = cb ? cb[C.trace] : __active_trace;
    while (tr) {
      line = "   at " + (_trace_to_string(tr));
      ret.push(line);
      tr = tr != null ? (_ref = tr[C.parent]) != null ? _ref[C.trace] : void 0 : void 0;
    }
    return ret;
  };

  exports.exceptionHandler = exceptionHandler = function(err, logger) {
    var stack;
    if (!logger) {
      logger = console.error;
    }
    logger(err.stack);
    stack = stackWalk();
    if (stack.length) {
      logger("Iced 'stack' trace (w/ real line numbers):");
      return logger(stack.join("\n"));
    }
  };

  exports.catchExceptions = function(logger) {
    return typeof process !== "undefined" && process !== null ? process.on('uncaughtException', function(err) {
      exceptionHandler(err, logger);
      return process.exit(1);
    }) : void 0;
  };

}).call(this);

}).call(this,_dereq_("FWaASH"))
},{"./const":17,"FWaASH":14}]},{},[1])
(1)
});
})(this);